fun main() {
    val n = readLine()!!.toLong()
    var m = n

    val counter = mutableMapOf<Long, Int>()
    while (m % 2L == 0L) {
        counter[2L] = (counter[2L] ?: 0) + 1
        m /= 2L
    }

    var factor = 3L
    while (factor * factor <= n) {
        while (m % factor == 0L) {
            counter[factor] = (counter[factor] ?: 0) + 1
            m /= factor
        }

        factor += 2L
    }

    if (m != 1L) {
        counter[0] = 1
    }

    val max = counter.map { it.value }.max() ?: 0
    val triangular = (1..max).map {
        it * (it + 1) / 2
    }

    val result = counter.map { (_, value) ->
        val index = triangular.indexOfLast { value >= it }
        if (index == -1) {
            0
        } else {
            index + 1
        }
    }.sum()

    println(result)
}