#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define MASK(i) (1LL << (i))
#define BIT(i,n) (((n) >> (i)) & 1LL)
 
typedef long long ll;
typedef pair<int, int> pii;
 
template <class X, class Y> bool mini(X& x, const Y& y) {
    if(x > y){ x = y; return 1; }
    return 0;
}
 
template <class X, class Y> bool maxi(X& x, const Y& y) {
    if(x < y){ x = y; return 1; }
    return 0;
}
 
const ll MOD = 1e9 + 7;
const int N = 1e7 + 5;
 
int n, f[N], cnt[N];
ll ans = 1;
 
ll bpw(ll x, ll m)
{
    ll res = 1;
    x %= MOD;
    while(m){
        if(m & 1) res = res * x % MOD;
        x = x * x % MOD, m >>= 1;
    }
    return res;
}
 
void sieve()
{
    for(int i = 1; i < N; ++i) f[i] = i;
    for(int i = 4; i < N; ++i)
        while(f[i] % 4 == 0) f[i] /= 4;
    for(int i = 3; i * i < N; i += 2){
        if(f[i] != i) continue;
        for(int j = i * i, i2 = j; j < N; j += i << 1)
            while(f[j] % i2 == 0) f[j] /= i2;
    }
}
 
int main()
{
    ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
 
    sieve();
 
    cin >> n;
    for(int i = 1; i <= n; ++i){
        ++cnt[f[i]];
    }
 
    for(int i = 1; i <= n; ++i) if(cnt[i])
        ans = (ans * (cnt[i] + 1)) % MOD;
 
    cout << ans << "\n";
 
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksICh4KS5lbmQoKQojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgQklUKGksbikgKCgobikgPj4gKGkpKSAmIDFMTCkKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKCnRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPiBib29sIG1pbmkoWCYgeCwgY29uc3QgWSYgeSkgewogICAgaWYoeCA+IHkpeyB4ID0geTsgcmV0dXJuIDE7IH0KICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4gYm9vbCBtYXhpKFgmIHgsIGNvbnN0IFkmIHkpIHsKICAgIGlmKHggPCB5KXsgeCA9IHk7IHJldHVybiAxOyB9CiAgICByZXR1cm4gMDsKfQoKY29uc3QgbGwgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IE4gPSAxZTcgKyA1OwoKaW50IG4sIGZbTl0sIGNudFtOXTsKbGwgYW5zID0gMTsKCmxsIGJwdyhsbCB4LCBsbCBtKQp7CiAgICBsbCByZXMgPSAxOwogICAgeCAlPSBNT0Q7CiAgICB3aGlsZShtKXsKICAgICAgICBpZihtICYgMSkgcmVzID0gcmVzICogeCAlIE1PRDsKICAgICAgICB4ID0geCAqIHggJSBNT0QsIG0gPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9Cgp2b2lkIHNpZXZlKCkKewogICAgZm9yKGludCBpID0gMTsgaSA8IE47ICsraSkgZltpXSA9IGk7CiAgICBmb3IoaW50IGkgPSA0OyBpIDwgTjsgKytpKQogICAgICAgIHdoaWxlKGZbaV0gJSA0ID09IDApIGZbaV0gLz0gNDsKICAgIGZvcihpbnQgaSA9IDM7IGkgKiBpIDwgTjsgaSArPSAyKXsKICAgICAgICBpZihmW2ldICE9IGkpIGNvbnRpbnVlOwogICAgICAgIGZvcihpbnQgaiA9IGkgKiBpLCBpMiA9IGo7IGogPCBOOyBqICs9IGkgPDwgMSkKICAgICAgICAgICAgd2hpbGUoZltqXSAlIGkyID09IDApIGZbal0gLz0gaTI7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSxjaW4udGllKDApLGNvdXQudGllKDApOwogICAgCiAgICBzaWV2ZSgpOwoKICAgIGNpbiA+PiBuOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyArK2kpewogICAgICAgICsrY250W2ZbaV1dOwogICAgfQoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSBpZihjbnRbaV0pCiAgICAgICAgYW5zID0gKGFucyAqIChjbnRbaV0gKyAxKSkgJSBNT0Q7CiAgICAgICAgCiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwoKICAgIHJldHVybiAwOwp9Cg==