import Data.List

main::IO()
main=do
    n <- readLn::IO Int
    let n' = fact n
        px = (genPrime . floor . sqrt . fromIntegral)n'
        qx = if px == [] then [[1]] else group $ primeFactorize n' px  []
        rx = if n == 1 then [1] else map (\xs -> length xs + 1) qx
        in print $ mod (product' rx) 1000000007


product'::[Int]->Integer
product' xs = foldr1(*) $ map (\x->fromIntegral x)xs  

primeFactorize::Integer->[Integer]->[Integer]->[Integer]
primeFactorize n' (p:px) xs
    |n'  == 1 = xs
    |n' `mod` p /= 0 = if px  == [] then n':xs else primeFactorize n' px xs
    |otherwise = primeFactorize (n' `div` p) (p:px) (p:xs)

fact::Int->Integer
fact k 
    |k == 1 = 1
    |otherwise = foldr1(*)[1..(fromIntegral k)] 

genPrime::Integer->[Integer]
genPrime n
    | n < 2 = []
    | n == 2 = [2]
    | otherwise = sieve [2..n] n
    where
        sieve :: [Integer] -> Integer -> [Integer]
        sieve [] _ = []
        sieve (x:xs) n
            | x^2 > n = x:xs
            | otherwise = x : sieve [a | a <- xs, a `mod` x > 0] n


