#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
typedef long long LL;
const int e[]={0,1,1,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,
               5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8};
const LL UnUseMethod=1e9;
LL count[2]={0};
LL IN(void)
{
  LL x=0;short f=0,c=getchar();while(c<48||c>57){f^=c==45,c=getchar();}
  while(c>47&&c<58){x=x*10+c-48,c=getchar();}return f?-x:x;
}
LL GCD(LL a,LL b){return !b?a:GCD(b,a%b);}
LL Mult(LL x,LL y,LL mod)
{LL temp=x*y-(LL)((long double)x/mod*y+1e-8)*mod;return temp<0?temp+mod:temp;}
LL BinaryModularPower(LL base,LL pow,LL mod)
{
  LL x=1;
  while(pow){if(pow&1){x=Mult(x,base,mod);}base=Mult(base,base,mod);pow>>=1;}
  return x;
}
LL f(LL x,LL mod,LL c){return (Mult(x,x,mod)+c)%x+1;}
void Exp(LL x,LL y){count[1]=0;while(!(x%y)){count[1]++;x/=y;}count[0]=x;return;}
int MillerRabin(LL x,LL base)
{
  int loop=0;LL y=x-1,keep;
  while((y&1)==0){y>>=1;loop++;}
  keep=BinaryModularPower(base,y,x);
  for(int i=0;i<loop;i++)
  {
    keep=Mult(keep,keep,x);
    if(keep==1)return 0;
    if(keep==x-1)return 1;
  }
  return 0;
}
int Prime(LL n)
{
  int flag=1,q;
  if(n==1||(n!=2&&n%2==0))return 0;
  if((n&1)==0)return 0;
  const int base[]={2,3,5,7,11,13,17,19,23,29,
                    31,37,41,43,47,53,59,61,67};
  for(int i=0;i<19;i++){q=base[i];if(n==q){return 1;}else if(n%q==0)return 0;}
  for(int i=0;i<19;i++){q=base[i];flag&=MillerRabin(n,q);}
  return flag;
}
LL PollardRho(LL n,LL a)
{
  srand((unsigned int)time(NULL));
  LL x=rand()%n,y=x,gcd=1,k=0,i=1;
  while(gcd==1)
  {
    k++;
    x=Mult(x,x,n)+a;if(x>=n)x-=n;
    gcd=GCD(x>y?x-y:y-x,n);
    if(k==i){y=x;i<<=1;}
  }
  if(gcd==n)return PollardRho(n,a+1);
  return gcd;
}
int main(void)
{
  LL a=0,p=1,q=-1,N=IN();
  if(N<=1)return puts("0"),0;
  Exp(N,2);a=e[count[1]];N=count[0];
  Exp(N,3);a+=e[count[1]];N=count[0];
  while(q*q<=UnUseMethod)
  {
    p+=6,q+=6;
    Exp(N,p);a+=e[count[1]];N=count[0];
    Exp(N,q);a+=e[count[1]];N=count[0];
  }
  if(N<=UnUseMethod){if(N>1){a++;}return printf("%lld\n",a),0;}
  if(Prime(N)){a++;return printf("%lld\n",a),0;}
  while(N>1)
  {
    p=PollardRho(N,0);
    while(!Prime(p))p=PollardRho(p,p);
    Exp(N,p);a+=e[count[1]];N=count[0];
  }
  if(N>1){a++;}return printf("%lld\n",a),0;
}