#include using namespace std; #include using mint = atcoder::modint1000000007; using ll = long long; using vl = vector; mint helper(ll n, ll x) { mint v = 1; while (n) v += n /= x; return v; } int main() { ll n; cin >> n; ll sq = 1; while (sq * sq <= n) sq++; sq--; ll nsq = n / sq; int m = nsq + sq; vl f(m, 0); for (ll i = 1; i <= sq; i++) f[m - i] = n / i - 1; for (ll i = 1; i < nsq; i++) f[i] = i - 1; for (ll p = 2; p <= sq; p++) { if (f[p] == f[p - 1]) continue; ll q = f[p - 1], pp = p * p; for (ll i = 1; i <= sq && n / i >= pp; i++) { ll ip = i * p; f[m - i] -= f[ip <= sq ? m - ip : n / ip] - q; } for (ll i = n / sq - 1; i >= pp; i--) f[i] -= f[i / p] - q; } mint ans = 1; ll prv = f[1]; for (ll i = 2; i < nsq; i++) { ll cnt = f[i]; ans *= helper(n, i).pow(cnt - prv); prv = cnt; } for (ll i = sq; i; i--) { ll cnt = f[m - i]; ans *= helper(n, n / i).pow(cnt - prv); prv = cnt; } cout << ans.val() << "\n"; }