def find_primes(n):

    ps = []

    t = [True] * n

    t[0] = t[1] = False

    for i in range(2, n):

        if not t[i]:

            continue

        ps.append(i)

        for j in range(i, n, i):

            t[j] = False

    return ps





def solve(string):

    n = int(string)

    if n == 1:

        return "0"

    rn = int(n**0.5 + 1)

    ps = find_primes(rn)

    ans = 0

    for i in ps:

        k = 1

        while n % (i**k) == 0:

            ans += 1

            n //= i**k

            k += 1

    return str(ans + (n >= rn))





if __name__ == '__main__':

    import sys

    print((solve(sys.stdin.read().strip())))

import collections



n = int(eval(input()))



def prime_factorize(n):

    a = []

    while n % 2 == 0:

        a.append(2)

        n //= 2

    f = 3

    while f * f <= n:

        if n % f == 0:

            a.append(f)

            n //= f

        else:

            f += 2

    if n != 1:

        a.append(n)

    return a



if n == 1: # 1

    print((0))

    exit()



c = collections.Counter(prime_factorize(n))

_, counts = list(zip(*c.most_common()))



l = list(counts)

ans = 0



if l == [1]: # prime number

    print((1))

    exit()



for i in l:

    for j in range(1, i+1):

        if i >= j:

            i -= j

            ans += 1



print(ans)

def find_primes(n):
    ps = []
    t = [True] * n
    t[0] = t[1] = False
    for i in range(2, n):
        if not t[i]:
            continue
        ps.append(i)
        for j in range(i, n, i):
            t[j] = False
    return ps


def solve(string):
    n = int(string)
    if n == 1:
        return "0"
    rn = int(n**0.5 + 1)
    ps = find_primes(rn)
    ans = 0
    for i in ps:
        k = 1
        while n % (i**k) == 0:
            ans += 1
            n //= i**k
            k += 1
    return str(ans + (n >= rn))


if __name__ == "__main__":
    import sys

    print((solve(sys.stdin.read().strip())))

import collections

n = int(eval(input()))


def prime_factorize(n):
    a = []
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    return a


if n == 1:  # 1
    print((0))
    exit()
c = collections.Counter(prime_factorize(n))
_, counts = list(zip(*c.most_common()))
l = list(counts)
ans = 0
if l == [1]:  # prime number
    print((1))
    exit()
for i in l:
    for j in range(1, i + 1):
        if i >= j:
            i -= j
            ans += 1
print(ans)

-def find_primes(n): -    ps = [] -    t = [True] * n -    t[0] = t[1] = False -    for i in range(2, n): -        if not t[i]: -            continue -        ps.append(i) -        for j in range(i, n, i): -            t[j] = False -    return ps +import collections + +n = int(eval(input())) -def solve(string): -    n = int(string) -    if n == 1: -        return "0" -    rn = int(n**0.5 + 1) -    ps = find_primes(rn) -    ans = 0 -    for i in ps: -        k = 1 -        while n % (i**k) == 0: -            ans += 1 -            n //= i**k -            k += 1 -    return str(ans + (n >= rn)) +def prime_factorize(n): +    a = [] +    while n % 2 == 0: +        a.append(2) +        n //= 2 +    f = 3 +    while f * f <= n: +        if n % f == 0: +            a.append(f) +            n //= f +        else: +            f += 2 +    if n != 1: +        a.append(n) +    return a -if __name__ == "__main__": -    import sys - -    print((solve(sys.stdin.read().strip()))) +if n == 1:  # 1 +    print((0)) +    exit() +c = collections.Counter(prime_factorize(n)) +_, counts = list(zip(*c.most_common())) +l = list(counts) +ans = 0 +if l == [1]:  # prime number +    print((1)) +    exit() +for i in l: +    for j in range(1, i + 1): +        if i >= j: +            i -= j +            ans += 1 +print(ans)