import math



N = int(eval(input()))



MOD = 10 ** 9 + 7



# 試し割り法(2以外の偶数は捨てる方法を追加)

def check_prime(n):

    flag = True



    # n:evenかつ2でないならば素数でない

    # n=1は素数でない,n=0も実装しやすいように入れておく

    if (n % 2 == 0 and n != 2) or n == 0 or n == 1:

        flag = False

        return(flag)



    # n:oddまたは2のときは考える

    else:

        # 2からrootnまでに約数は存在しうる

        for i in range(2, math.floor(math.sqrt(n))+1):

            if n % i == 0:

                flag = False

                break

        return(flag)



# N以下の素数を格納

prime = []

for i in range(N+1):

    if check_prime(i):

        prime.append(i)



M = len(prime)

cnt = [0]*M # primeで割れる個数を格納

for i in range(1, N+1):

    for j in range(M):

        p = prime[j]

        if p > i:

            break

        else:

            while i % p == 0:

                i //= p

                cnt[j] += 1



ans = 1

for i in range(M):

    ans *= cnt[i] + 1

    ans %= MOD

print(ans)
# こちらの方がやや高速

import math



N = int(eval(input()))



MOD = 10 ** 9 + 7



# 試し割り法(2以外の偶数は捨てる方法を追加)

def check_prime(n):

    flag = True



    # n:evenかつ2でないならば素数でない

    # n=1は素数でない,n=0も実装しやすいように入れておく

    if (n % 2 == 0 and n != 2) or n == 0 or n == 1:

        flag = False

        return(flag)



    # n:oddまたは2のときは考える

    else:

        # 2からrootnまでに約数は存在しうる

        for i in range(2, math.floor(math.sqrt(n))+1):

            if n % i == 0:

                flag = False

                break

        return(flag)



# N以下の素数を格納

prime = []

for i in range(N+1):

    if check_prime(i):

        prime.append(i)



M = len(prime)

cnt = [0]*M

for i in range(M):

    p = prime[i]

    while p <= N:

        cnt[i] += N // p

        p *= prime[i]



ans = 1

for i in range(M):

    ans *= cnt[i] + 1

    ans %= MOD

print(ans)
import math

N = int(eval(input()))
MOD = 10**9 + 7
# 試し割り法(2以外の偶数は捨てる方法を追加)
def check_prime(n):
    flag = True
    # n:evenかつ2でないならば素数でない
    # n=1は素数でない,n=0も実装しやすいように入れておく
    if (n % 2 == 0 and n != 2) or n == 0 or n == 1:
        flag = False
        return flag
    # n:oddまたは2のときは考える
    else:
        # 2からrootnまでに約数は存在しうる
        for i in range(2, math.floor(math.sqrt(n)) + 1):
            if n % i == 0:
                flag = False
                break
        return flag


# N以下の素数を格納
prime = []
for i in range(N + 1):
    if check_prime(i):
        prime.append(i)
M = len(prime)
cnt = [0] * M  # primeで割れる個数を格納
for i in range(1, N + 1):
    for j in range(M):
        p = prime[j]
        if p > i:
            break
        else:
            while i % p == 0:
                i //= p
                cnt[j] += 1
ans = 1
for i in range(M):
    ans *= cnt[i] + 1
    ans %= MOD
print(ans)

# こちらの方がやや高速
import math

N = int(eval(input()))
MOD = 10**9 + 7
# 試し割り法(2以外の偶数は捨てる方法を追加)
def check_prime(n):
    flag = True
    # n:evenかつ2でないならば素数でない
    # n=1は素数でない,n=0も実装しやすいように入れておく
    if (n % 2 == 0 and n != 2) or n == 0 or n == 1:
        flag = False
        return flag
    # n:oddまたは2のときは考える
    else:
        # 2からrootnまでに約数は存在しうる
        for i in range(2, math.floor(math.sqrt(n)) + 1):
            if n % i == 0:
                flag = False
                break
        return flag


# N以下の素数を格納
prime = []
for i in range(N + 1):
    if check_prime(i):
        prime.append(i)
M = len(prime)
cnt = [0] * M
for i in range(M):
    p = prime[i]
    while p <= N:
        cnt[i] += N // p
        p *= prime[i]
ans = 1
for i in range(M):
    ans *= cnt[i] + 1
    ans %= MOD
print(ans)

+# こちらの方がやや高速 -cnt = [0] * M  # primeで割れる個数を格納 -for i in range(1, N + 1): -    for j in range(M): -        p = prime[j] -        if p > i: -            break -        else: -            while i % p == 0: -                i //= p -                cnt[j] += 1 +cnt = [0] * M +for i in range(M): +    p = prime[i] +    while p <= N: +        cnt[i] += N // p +        p *= prime[i]