private fun readStrings() = readLine()!!.split(" ")
private fun readInts() = readStrings().map { it.toInt() }

private fun eratosthenes(bound: Int): Array<Boolean> {
    val primeList = Array(bound + 2) { true }
    val sieveBound = Math.ceil(Math.sqrt(bound.toDouble())).toInt()
    primeList[0] = false
    primeList[1] = false
    for (i in 2 .. sieveBound) {
        if (!primeList[i]) continue
        for (j in (2 * i .. bound).step(i)) {
            primeList[j] = false
        }
    }
    return primeList
}

private fun Array<Boolean>.toPrimes() = mapIndexedNotNull { index, isPrime ->
    if (isPrime) index else null
}

private val primes = eratosthenes(1000).toPrimes()

private fun pFactorIn(n: Int, p: Int): Int {
    var pPow = p
    var res = 0
    while (pPow <= n) {
        res += n / pPow
        pPow *= p
    }
    return res
}

fun main(args: Array<String>) {
    val N = readInts()[0]
    val pFactors = primes.map { pFactorIn(N, it) }
    val ans = pFactors.map { it.toLong() + 1L }.reduce { l1, l2 -> (l1 * l2) % 1000000007L }
    println(ans)
}