#include <bits/stdc++.h>
using namespace std;

#define int           long long
#define S             second
#define F             first
#define pb            push_back
#define all(c)        (c).begin(),(c).end()
#define rall(c)       (c).rbegin(),(c).rend() 
#define lb            lower_bound
#define si(c)         (int)((c).size())
#define lcm(a, b)      (a * (b / __gcd(a,b)))  
#define inf           (int)(1e18)
#define endl          '\n'
#define mp            make_pair
#define time(s)       (double(clock()-s)/double(CLOCKS_PER_SEC))
#define debug(args...)    _F(#args, args)
#define vi            std::vector<int>
#define pii           pair<int, int> 
#define vpi           vector<pii >

clock_t start;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());

template<typename T> void _F(const char *name, T arg1){cerr << name << " = " << arg1 << endl;}
template<typename T, typename... Args> void _F(const char *names, T arg1, Args... args){
const char *name = strchr(names, ',');cerr.write(names, name-names) << " = " << arg1 << endl;_F(name+2, args...);}

template< typename T1, typename T2> istream& operator>>(istream& in, pair<T1, T2> &q){ in >> q.F >> q.S; return in;}
template< typename T1, typename T2> ostream& operator<<(ostream& out, pair<T1, T2> &q){out << q.F << " " << q.S; return out;}
template< typename T1, typename T2> pair<T1, T2> operator+(pair<T1, T2> p1, pair<T1, T2> p2){return {p1.F+p2.F, p1.S+p2.S};}
template< typename T1, typename T2> pair<T1, T2> operator-(pair<T1, T2> p1, pair<T1, T2> p2){return {p1.F-p2.F, p1.S-p2.S};}


int dp[101][101];
int cur;

int DP(int n, int len){
    // cur++;
    //cout << n << " " << len << endl;
    if(n == 0 && len == 0)return 1;
    if(len == 0)return 0;
    if(n < 0 || len < 0)return 0;
    if(len*(len+1)/2 > n)return 0;
    if(dp[n][len] != -1)return dp[n][len];
    dp[n][len] = 0;
    for(int j = 1; j <= 100; j++){
        dp[n][len] |= DP(n-len*j, len-1);
    }
    return dp[n][len];
}

void solve() {
    memset(dp, -1, sizeof(dp));
    for(int j = 1; j <= 100; j++){
        for(int i = 1; i <= 100; i++){
            DP(j, i);
        }
    }
    // for(int i = 1; i <= 10; i++){
    //     for(int j = 1; j <= 10; j++)
    //         cout << dp[i][j] << " ";
    //     cout << endl;
    // }
    // cout << cur << endl;
    int n;
    cin >> n;
    vi v;
    for(int i = 2; i*i <= n; i++){
        if(n%i == 0){
            int cnt = 0;
            while(n%i == 0)n /= i, cnt++;
            v.pb(cnt);
        }
    }
    if(n > 1)v.pb(1);
    int ans = 0;
    for(auto u : v){
        int tmp;
        for(int j = 1; j <= 100; j++){
            if(dp[u][j] == 1)tmp = j;
        }
        ans += tmp;
    }
    cout << ans << endl;
}

signed main(){

    ios_base::sync_with_stdio(0); 
    cin.tie(0); cout.tie(0);   

    int t = 1;
    start = clock(); 

    cout << fixed << setprecision(20);

    // #ifndef ONLINE_JUDGE
    // freopen("input.txt", "r", stdin); 
    // freopen("output.txt", "w", stdout);
    // freopen("error.txt", "w", stderr);
    // #endif
   
    // cin >> t;
    
    for(int i = 1; i <= t; ++i){
        solve();
    }
    //cerr << time(start);
    return 0;
}


Measured memory_bytes: 3756