import math



def append_factor(f, p):

    if p not in f:

        f[p] = 0

    f[p] += 1



def append_factors(n, f, p):

    num_factors = 0

    while n % p == 0:

        num_factors += 1

        n //= p

    if num_factors != 0:

        f[p] = num_factors

    return n



def factors(n):

    l = int(math.sqrt(n)) + 1

    ret = {}

    n = append_factors(n, ret, 2)

    n = append_factors(n, ret, 3)

    i = 6

    while i*i <= n + 1:

        p1, p2 = i - 1, i + 1

        n = append_factors(n, ret, i - 1)

        n = append_factors(n, ret, i + 1)

        i += 6

    if n != 1:

        append_factor(ret, n)



    return ret



def minimum_sum(x):

    # find the minimum integer n where n(n+1)/2 <= x

    # n^2 < n(n+1) <= 2x < (n+1)(n+2) < (n+2)^2



    n = int(math.sqrt(x))

    while (n + 1)*(n + 2) <= 2*x:

        n += 1



    return n



def main():

    N = int(eval(input()))

    fs = factors(N)

    # print(fs)

    ans = 0

    for f in fs:

        ans += minimum_sum(fs[f])

    print(ans)



if __name__ == '__main__':

    main()

import math



def factors(n):

    l = int(math.sqrt(n)) + 1

    ret = {}

    nf2 = 0

    while n % 2 == 0:

        nf2 += 1

        n //= 2

    if nf2 != 0:

        ret[2] = nf2

    nf3 = 0

    while n % 3 == 0:

        nf3 += 1

        n //= 3

    if nf3 != 0:

        ret[3] = nf3

    # n = append_factors(n, ret, 2)

    # n = append_factors(n, ret, 3)

    i = 6

    while i*i <= n + 1:

        p1, p2 = i - 1, i + 1

        nfp1 = 0

        while n % p1 == 0:

            nfp1 += 1

            n //= p1

        if nfp1 != 0:

            ret[p1] = nfp1

        nfp2 = 0

        while n % p2 == 0:

            nfp2 += 1

            n //= p2

        if nfp2 != 0:

            ret[p2] = nfp2

        # n = append_factors(n, ret, i - 1)

        # n = append_factors(n, ret, i + 1)

        i += 6

    if n != 1:

        ret[n] = 1



    return ret



def minimum_sum(x):

    # find the minimum integer n where n(n+1)/2 <= x

    # n^2 < n(n+1) <= 2x < (n+1)(n+2) < (n+2)^2



    n = int(math.sqrt(x))

    while (n + 1)*(n + 2) <= 2*x:

        n += 1



    return n



def main():

    N = int(eval(input()))

    fs = factors(N)

    # print(fs)

    ans = 0

    for f in fs:

        ans += minimum_sum(fs[f])

    print(ans)



if __name__ == '__main__':

    main()

import math


def append_factor(f, p):
    if p not in f:
        f[p] = 0
    f[p] += 1


def append_factors(n, f, p):
    num_factors = 0
    while n % p == 0:
        num_factors += 1
        n //= p
    if num_factors != 0:
        f[p] = num_factors
    return n


def factors(n):
    l = int(math.sqrt(n)) + 1
    ret = {}
    n = append_factors(n, ret, 2)
    n = append_factors(n, ret, 3)
    i = 6
    while i * i <= n + 1:
        p1, p2 = i - 1, i + 1
        n = append_factors(n, ret, i - 1)
        n = append_factors(n, ret, i + 1)
        i += 6
    if n != 1:
        append_factor(ret, n)
    return ret


def minimum_sum(x):
    # find the minimum integer n where n(n+1)/2 <= x
    # n^2 < n(n+1) <= 2x < (n+1)(n+2) < (n+2)^2
    n = int(math.sqrt(x))
    while (n + 1) * (n + 2) <= 2 * x:
        n += 1
    return n


def main():
    N = int(eval(input()))
    fs = factors(N)
    # print(fs)
    ans = 0
    for f in fs:
        ans += minimum_sum(fs[f])
    print(ans)


if __name__ == "__main__":
    main()

import math


def factors(n):
    l = int(math.sqrt(n)) + 1
    ret = {}
    nf2 = 0
    while n % 2 == 0:
        nf2 += 1
        n //= 2
    if nf2 != 0:
        ret[2] = nf2
    nf3 = 0
    while n % 3 == 0:
        nf3 += 1
        n //= 3
    if nf3 != 0:
        ret[3] = nf3
    # n = append_factors(n, ret, 2)
    # n = append_factors(n, ret, 3)
    i = 6
    while i * i <= n + 1:
        p1, p2 = i - 1, i + 1
        nfp1 = 0
        while n % p1 == 0:
            nfp1 += 1
            n //= p1
        if nfp1 != 0:
            ret[p1] = nfp1
        nfp2 = 0
        while n % p2 == 0:
            nfp2 += 1
            n //= p2
        if nfp2 != 0:
            ret[p2] = nfp2
        # n = append_factors(n, ret, i - 1)
        # n = append_factors(n, ret, i + 1)
        i += 6
    if n != 1:
        ret[n] = 1
    return ret


def minimum_sum(x):
    # find the minimum integer n where n(n+1)/2 <= x
    # n^2 < n(n+1) <= 2x < (n+1)(n+2) < (n+2)^2
    n = int(math.sqrt(x))
    while (n + 1) * (n + 2) <= 2 * x:
        n += 1
    return n


def main():
    N = int(eval(input()))
    fs = factors(N)
    # print(fs)
    ans = 0
    for f in fs:
        ans += minimum_sum(fs[f])
    print(ans)


if __name__ == "__main__":
    main()

- - -def append_factor(f, p): -    if p not in f: -        f[p] = 0 -    f[p] += 1 - - -def append_factors(n, f, p): -    num_factors = 0 -    while n % p == 0: -        num_factors += 1 -        n //= p -    if num_factors != 0: -        f[p] = num_factors -    return n -    n = append_factors(n, ret, 2) -    n = append_factors(n, ret, 3) +    nf2 = 0 +    while n % 2 == 0: +        nf2 += 1 +        n //= 2 +    if nf2 != 0: +        ret[2] = nf2 +    nf3 = 0 +    while n % 3 == 0: +        nf3 += 1 +        n //= 3 +    if nf3 != 0: +        ret[3] = nf3 +    # n = append_factors(n, ret, 2) +    # n = append_factors(n, ret, 3) -        n = append_factors(n, ret, i - 1) -        n = append_factors(n, ret, i + 1) +        nfp1 = 0 +        while n % p1 == 0: +            nfp1 += 1 +            n //= p1 +        if nfp1 != 0: +            ret[p1] = nfp1 +        nfp2 = 0 +        while n % p2 == 0: +            nfp2 += 1 +            n //= p2 +        if nfp2 != 0: +            ret[p2] = nfp2 +        # n = append_factors(n, ret, i - 1) +        # n = append_factors(n, ret, i + 1) -        append_factor(ret, n) +        ret[n] = 1