#include using namespace std; #define REP(i,n) for (int i = 0; i < (n); ++i) #define DREP(i,s,n) for(int i = (s); i < (n); i++) template inline bool chmin(T& a, T b) {if (a > b) {a = b;return true;}return false;} template inline bool chmax(T& a, T b) {if (a < b) {a = b;return true;}return false;} using ll = long long; using P = pair; using Pl = pair; using veci = vector; using vecl = vector; using vecveci = vector>; using vecvecl = vector>; const int MOD = 1000000007; const double pi = acos(-1); ll gcd(ll a, ll b) {if(b == 0) return a; else return gcd(b,a%b);} ll lcm(ll a, ll b) {return a*b/gcd(a,b);} veci div(int N) { veci res; for(int i = 1; i*i <= N; i++) { if(N%i == 0) { res.push_back(i); if(i != N/i) res.push_back(N/i); } } sort(res.begin(),res.end()); return res; } int main() { int M; cin >> M; vecl dp(1000010); dp[0] = 1; for(int i = 1; i <= M; i++) { for(auto j : div(i)) { dp[i] += dp[i/j-1]; dp[i] %= MOD; } } cout << dp[M] << endl; }