import java.lang.Math.sqrt

fun main() = Thread(null, ::abc169d, "(^o^)", 128 * 1024 * 1024).apply { start() }.join()

@OptIn(ExperimentalStdlibApi::class)
fun abc169d() {
    val n = readLine()!!.toLong()

    var currN = n
    var answer = 0

    val chosen = mutableSetOf<Long>()
    val divs = divisors(n)

    for (div in divs) {
        if (div < 2 || !isPrime(div)) continue
        var z = div
        while (z <= n) {
            if (currN % z == 0L && chosen.add(z)) {
                currN /= z
                answer++
            }
            z *= div
        }
    }

    println(answer)
}

private fun divisors(n: Long): Set<Long> {
    val divisors = mutableSetOf<Long>()
    for (i in 1..sqrt(n.toDouble()).toLong()) if (n % i == 0L) divisors.addAll(listOf(i, n / i))
    return divisors
}

private fun isPrime(n: Long): Boolean {
    val sqrt = sqrt(n.toDouble()).toLong()
    for (i in 2..sqrt) if (n % i == 0L) return false
    return true
}
