
#include <bits/stdc++.h>

#define ll int64_t
using namespace std;
#include <cstdlib> 
#include <math.h>
#include<cstdio>
#include<cstring>
#define FOR(I, A, B) for (int I = (A); I <= (B); I++)
#define fo(i,n) for(int i=0;i<n;i++)
#define sz(a) int((a).size())
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define dbg(x) cout << #x << " = " << x << endl
#define dbg2(x,y) cout << #x << " = " << x << ", " << #y << " = " << y << endl
#define dbg3(x,y,z) cout << #x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl
#define dbg4(x,y,z,q) cout << #x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << ", " << #q << " = " << q << endl
#define scan(char_array) scanf("%[^\n]s",&char_array)
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const ll N=1000005;

ll primes[N];
void sieve()
{
  
  
  for(ll i=2;i<=N;i++)
  {
    if(primes[i]==-1)
    {
        for(ll j=i;j<=N;j+=i) primes[j]=i;
        
     }
   }

}


int main(){
    IOS
    fo(i,1000005) primes[i]=-1;
    sieve();

    ll n;
    cin>>n;
    if(n==2) {
    	cout<<1<<endl;
    	return 0;
    }
    map<ll,ll> mp;
    ll ans=0;
    FOR(i,2,sqrt(n)){
    	if(primes[i]==i&&n%i==0){
    		while(n%i==0){
    			n=n/i;
    			mp[i]++;
    		}
    	}
    }
    if(n>1) mp[n]=1;
    for(auto pp:mp){
    	ll tt=1;
    	ll cnt=1;
    	//dbg2(pp.first,pp.second);
    	while(tt<pp.second){
    		cnt++;
    		tt+=cnt;
    	}
    	ans+=cnt;
    	if(tt>pp.second) ans--;
    }
    cout<<ans<<endl;


}