//********************************************************************//
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define MP make_pair
#define PB push_back
#define EB emplace_back
#define fi first 
#define se second 
#define RANGE(i, n) for (int i = 0; i < n; ++i)
#define FOR(i, a, b) for (int i = a; i < b; ++i)
#define DFOR(i, a, b) for(int i = a; i > b; --i)
#define DEB(x) cout << #x << ": " << x << endl
#define ALL(v) v.begin(), v.end() 
#define SORT(v) sort(ALL(v))
#define DISPV(v) { for(auto x___: v) cout << x___ << " "; cout << endl; }
#define DISPM(m) { for(auto x____: m){ cout << x____.first << ": " << x____.second << endl; } };
#define DISPMV(m) { for(auto x_____: m){ cout << x_____.first << ": " ;DISPV(x_____.second);} };
using LL = long long;
using VI = vector <int>;
using VC = vector <char>;
using VS = vector <string>;
using VL = vector <long long>;
using VVI = vector<VI>;
using VVL = vector <VL>;
using MII = map<int, int>;
using MIVI = map<int, VI>;
using MSS = map<string, string>;
using MLL = map<LL, LL>;
int READ_INT(){int temp;cin>>temp;return temp;}      // read an int
LL READ_LONG(){LL temp;cin>>temp;return temp;}      // read a long long
void mcs(VI &series, int &max_sum){                    // maximum contigous sub sum(kadane)
    int s=0;
    for(auto x: series){
        s += x;
        max_sum = max(max_sum, s);
        if(s < 0)s = 0;
    }
}
template<typename T>
T MAX(T t){ return t;}
template <typename T, typename... Args>
T MAX(T t, Args... args){ return max(t, MAX(args...)); }
const int MOD = int(1e9) + 7;
const int INF = 1e9 + 5;
const double PI = acos(-1.0); //M_PI;
const double EPS = 1e-9;
//********************************************************************//

VI is_prime(1000001, 1);
VI primes;

void get_primes(LL n){
    int i = 2;
    for(int i = 2; i < sqrt(n)+1; ++i){
        if(is_prime[i]){
            int j = i*i;
            while(j <= n){
                is_prime[j] = 0;
                j += i;
            }
        }
    }
    for(int i = 2; i <= n; ++i){
        if(is_prime[i])primes.push_back(i);
    }
}

int intlog(double base, double x) {
    return (int)(log(x) / log(base));
}

int main(){
    ios::sync_with_stdio(false);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    LL k = READ_LONG();
    unordered_set<LL>factors;

    for(int i = 2; i <= sqrt(k); ++i){
        if(k % i == 0){
            factors.insert(i);
            factors.insert(k/i);
        }
    }

    get_primes(min(k, (LL)1000000));
 
    int ans = 0;
    for(auto f: factors){
        if(f < 1000000 && is_prime[f]){
            LL prev = f;
            while(prev <= k){
                if(k % prev == 0){
                    // cout << "prime factor: " << prev << endl;
                    k = k / prev;
                    ans++;
                    prev *= f;
                }
                else 
                    break;
            }
        }
    }
    if(k > 1000000)
        ans++;
    cout << ans;

    // for(auto f: factor_count)cout << f.first << ": " << f.second << endl;

    // DISPV(primes);
    // for(auto v: factors)cout << v << endl;

    

    return 0;
}



/* complie flags
-Wall -Wextra -pedantic -std=c++11 -O2 -Wshadow -Wformat=2 -Wfloat-equal -Wconversion -Wlogical-op -Wshift-overflow=2 -Wduplicated-cond -Wcast-qual -Wcast-align -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_FORTIFY_SOURCE=2 -fsanitize=address -fsanitize=undefined -fno-sanitize-recover -fstack-protector
*/

Measured memory_bytes: 7868