#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>

using namespace std;

typedef unsigned long long ull;


vector <ull> primes;
ull max_prime;

bool is_prime(ull n) {
    ull m;
    int i;
    bool result = true;

    m = int(sqrt(n));

    i = 0;
    while (primes[i] <= m) {
        if (n % primes[i] == 0) {
            // cout << n << " % " << primes[i] << " == 0" << endl;
            result = false;
            break;
        }
        i++;
    }

    return result;
}


void calc_primes(ull n) {
    ull i;

    primes.push_back(2);
    for (i = 3; i <= n; i += 2) {
        if (is_prime(i))
            primes.push_back(i);
    }
}

map <ull,int> decomp(ull n) {
    map <ull,int> prime_count;

    ull m = n;
    int i = 0;
    int n_primes = primes.size();

    while (i < n_primes && primes[i] <= m) {
        if (m % primes[i] == 0) {
            m /= primes[i];

            auto itr = prime_count.find(primes[i]);
            if (itr != prime_count.end()) {
                (itr->second) +=1;
            }
            else {
                prime_count.insert(pair<ull, int>{primes[i],1});
            }
        }
        else {
            i++;
        }
    }
    return prime_count;
}

int main()
{
    ull N;
    cin >> N;

    if (N == 1) {
        cout << 1 << endl;
        exit(0);
    }

    calc_primes(int(sqrt(N)));
    map <ull,int> prime_count = decomp(N);

    if (prime_count.size() == 0) {
        cout << 1 << endl;
        exit(0);
    }

    int n = 0;
    for (auto itr : prime_count) {
        //cout << itr.first << ":" << itr.second << " ";

        int m = itr.second;
        int i = 1;
        while (m >= i) {
            n++;

            m -= i;
            i++;
        }

    }
    cout << n << endl;
}