def getN():

    return int(eval(input()))

def getNM():

    return list(map(int, input().split()))

def getList():

    return list(map(int, input().split()))

def getArray(intn):

    return [int(eval(input())) for i in range(intn)]

def input():

    return sys.stdin.readline().rstrip()



from collections import defaultdict, deque, Counter

from sys import exit

import heapq

import math

from fractions import gcd

import copy

from itertools import permutations

from operator import mul

from functools import reduce

from bisect import bisect_left, bisect_right



import sys

sys.setrecursionlimit(1000000000)

mod = 10 ** 9 + 7



from itertools import permutations

from math import factorial, hypot



#############

# Main Code #

#############



N = getN()

if N == 1:

    print((0))

    exit()



def factime(ny):

    cnt = 1

    sum = 0

    while True:

        if sum + cnt > ny:

            break

        sum += cnt

        cnt += 1

    return cnt - 1



def prime_factorize(n):

    divisors = []

    # 27(2 * 2 * 7)の7を出すためにtemp使う

    temp = n

    for i in range(2, int(math.sqrt(n)) + 1):

        if temp % i == 0:

            cnt = 0

            while temp % i == 0:

                cnt += 1

                # 素因数を見つけるたびにtempを割っていく

                temp //= i

            divisors.append([i, cnt])

    if temp != 1:

        divisors.append([temp, 1])

    if divisors == []:

        divisors.append([n, 1])



    return divisors



ans = 0

for i in prime_factorize(N):

    ans += factime(i[1])

print(ans)
def getN():

    return int(eval(input()))

def getNM():

    return list(map(int, input().split()))

def getList():

    return list(map(int, input().split()))

def getArray(intn):

    return [int(eval(input())) for i in range(intn)]

def input():

    return sys.stdin.readline().rstrip()



from collections import defaultdict, deque, Counter

from sys import exit

import heapq

import math

import copy

from bisect import bisect_left, bisect_right



import sys

sys.setrecursionlimit(1000000000)

mod = 10 ** 9 + 7



N = getN()

if N == 1:

    print((0))

    exit()



# 1(1), 2(1 + 2), 3(1 + 2 + 3)...を超えられるか

def factime(ny):

    cnt = 1

    sum = 0

    while True:

        if sum + cnt > ny:

            return cnt - 1

            break

        sum += cnt

        cnt += 1



# 素因数分解

def prime_factorize(n):

    divisors = []

    # 27(2 * 2 * 7)の7を出すためにtemp使う

    temp = n

    for i in range(2, int(math.sqrt(n)) + 1):

        if temp % i == 0:

            cnt = 0

            while temp % i == 0:

                cnt += 1

                # 素因数を見つけるたびにtempを割っていく

                temp //= i

            divisors.append([i, cnt])

    if temp != 1:

        divisors.append([temp, 1])

    if divisors == []:

        divisors.append([n, 1])



    return divisors



ans = 0

for i in prime_factorize(N):

    ans += factime(i[1])

print(ans)
def getN():
    return int(eval(input()))


def getNM():
    return list(map(int, input().split()))


def getList():
    return list(map(int, input().split()))


def getArray(intn):
    return [int(eval(input())) for i in range(intn)]


def input():
    return sys.stdin.readline().rstrip()


from collections import defaultdict, deque, Counter
from sys import exit
import heapq
import math
from fractions import gcd
import copy
from itertools import permutations
from operator import mul
from functools import reduce
from bisect import bisect_left, bisect_right
import sys

sys.setrecursionlimit(1000000000)
mod = 10**9 + 7
from itertools import permutations
from math import factorial, hypot

#############
# Main Code #
#############
N = getN()
if N == 1:
    print((0))
    exit()


def factime(ny):
    cnt = 1
    sum = 0
    while True:
        if sum + cnt > ny:
            break
        sum += cnt
        cnt += 1
    return cnt - 1


def prime_factorize(n):
    divisors = []
    # 27(2 * 2 * 7)の7を出すためにtemp使う
    temp = n
    for i in range(2, int(math.sqrt(n)) + 1):
        if temp % i == 0:
            cnt = 0
            while temp % i == 0:
                cnt += 1
                # 素因数を見つけるたびにtempを割っていく
                temp //= i
            divisors.append([i, cnt])
    if temp != 1:
        divisors.append([temp, 1])
    if divisors == []:
        divisors.append([n, 1])
    return divisors


ans = 0
for i in prime_factorize(N):
    ans += factime(i[1])
print(ans)

def getN():
    return int(eval(input()))


def getNM():
    return list(map(int, input().split()))


def getList():
    return list(map(int, input().split()))


def getArray(intn):
    return [int(eval(input())) for i in range(intn)]


def input():
    return sys.stdin.readline().rstrip()


from collections import defaultdict, deque, Counter
from sys import exit
import heapq
import math
import copy
from bisect import bisect_left, bisect_right
import sys

sys.setrecursionlimit(1000000000)
mod = 10**9 + 7
N = getN()
if N == 1:
    print((0))
    exit()
# 1(1), 2(1 + 2), 3(1 + 2 + 3)...を超えられるか
def factime(ny):
    cnt = 1
    sum = 0
    while True:
        if sum + cnt > ny:
            return cnt - 1
            break
        sum += cnt
        cnt += 1


# 素因数分解
def prime_factorize(n):
    divisors = []
    # 27(2 * 2 * 7)の7を出すためにtemp使う
    temp = n
    for i in range(2, int(math.sqrt(n)) + 1):
        if temp % i == 0:
            cnt = 0
            while temp % i == 0:
                cnt += 1
                # 素因数を見つけるたびにtempを割っていく
                temp //= i
            divisors.append([i, cnt])
    if temp != 1:
        divisors.append([temp, 1])
    if divisors == []:
        divisors.append([n, 1])
    return divisors


ans = 0
for i in prime_factorize(N):
    ans += factime(i[1])
print(ans)

-from fractions import gcd -from itertools import permutations -from operator import mul -from functools import reduce -from itertools import permutations -from math import factorial, hypot - -############# -# Main Code # -############# - - +# 1(1), 2(1 + 2), 3(1 + 2 + 3)...を超えられるか +            return cnt - 1 -    return cnt - 1 +# 素因数分解