/*
.   Bismillahir Rahmanir Rahim
.   Author - Marajul islam
.   created- Sun May 31 18:39:06 2020

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


 
int sc1() {int x; scanf("%d", &x); return x;}
long long sc2() {long long x; scanf("%lld", &x); return x;}

const int mod= 1e9 + 7;
inline int add(int a, int b) {a += b; return a >= mod ? a - mod : a;}
inline int sub(int a, int b) {a -= b; return a < 0 ? a + mod : a;}
inline int mul(int a, int b) {return (long long)a * b % mod;}
 
#define F               first
#define int             ll
#define S               second 
#define mp              make_pair
#define pb              push_back
#define pf              push_front
#define speed_up        ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define sz(x)           (int)x.size()
#define all(x)          x.begin(), x.end()
#define debug           cerr << "OK\n";
#define ub              upper_bound
#define lb              lower_bound
#define gcd(a,b)        __gcd(a,b)
#define lcm(a,b)        (a*b)/gcd(a,b)
#define Int             sc1()
#define LL              sc2()
#define For(n)          for(int i=0;i<n;i++)
#define Forj(n)         for(int j=0;j<n;j++)
#define Fork(n)         for(int k=0;k<n;k++)
#define For1(n)         for(int i=1;i<=n;i++)

typedef long long       ll;
typedef vector<int>     vi;
typedef vector<ll>      vll;
typedef pair<int, int>  pii;
typedef pair<ll, ll>    pll;
typedef vector<pii>     vpii;
typedef set <int>       si;
typedef set <ll>        sll;
typedef multiset <int>  msi;
typedef multiset <ll>   msll;
typedef map <int, int>  mi;
typedef map <ll, ll>    mll;

#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string> it) {cout << endl;}
template<typename T, typename... Args> void err(istream_iterator<string> it, T a, Args... args) {
    cerr << *it << " = " << a << ", ";
    err(++it, args...);
}
  
const int inf           = (int)2e9 + 5;
const ll  Inf           = (ll)1e18 + 5;
const int N             = 2e6 + 5;
 

 bool prm[N] ;
 std::vector<ll> prime;
 void sieve(){
 	prm[0] = prm[1] = 1 ;
 	for(int i = 4 ; i <= N ; i += 2) prm[i] = 1 ;
 	for(int i = 3 ; i * i <= N ; i += 2){
 		if(!prm[i]){
 			for(int j = i * i ; j <= N ; j+= i + i)prm[j] = 1 ;
 		}
 	}
 	for(int i=2;i<=N;i++) if(!prm[i]) prime.pb(i);
 }

void factorize( ll n ) {
    ll sqrtn = sqrt ( n );
    ll lol=0;
    for ( int i = 0; i < prime.size() && prime[i] <= sqrtn; i++ ) {
    	// cout<<prime[i]<<endl;
    	ll cnt = 0;
        if ( n % prime[i] == 0 ) {
            while ( n % prime[i] == 0 ) {
                n /= prime[i];
                // cout<<prime[i]<<endl;
                cnt++;
            }
            sqrtn = sqrt ( n );
        }
        ll ans=0,ab=1,pk=0;
        while(1){
        	ans+=ab++;
        	if(ans>cnt) break;
        	pk++;
        }
        lol+=pk;
    }
    if ( n != 1 ) {
    	// error(n);
        lol++;
    }
    cout<<lol<<endl;
}  
 
int solve() {
 
	int n=LL;
	factorize(n);

 
	return 0;
}
 
 
 
 
int32_t main()
{
	//speed_up;
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
 	sieve();
	int test = 1, tc = 0;
	//scanf("%d", &test);
	//cin >> test;
	while (test--) {
		//printf("Case %d: ", ++tc);
		solve();
	}
 
	return 0;
 
 
 
 
}




Measured memory_bytes: 7156