#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==