#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> l_l;
typedef pair<int, int> i_i;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef vector<char> vec;
typedef vector<bool> veb;
typedef vector<string> ves;
typedef vector<vector<ll>> vvl;
typedef vector<vector<int>> vvi;
typedef vector<vector<char>> vvec;
typedef vector<vector<bool>> vveb;
typedef vector<vector<string>> vves;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep1(i, n) for (int i = 1; i < (int)(n); i++)
#define rep2(i, n) for (int i = 2; i < (int)(n); i++)
#define repk(i, k, n) for (int i = k; i < (int)(n); i++)
#define rev(v) reverse(v.begin(), v.end())
#define fs first
#define sc second
#define pb push_back
#define pp pop_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define maxel(a) *max_element(all(a))
#define minel(a) *min_element(all(a))
#define acc accumulate
#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))
#define mod (1000000007)
typedef long long int64;
// const int64 INF = 1LL << 58;
#define dame                                                                   \\
  {                                                                            \\
    puts("-1");                                                                \\
    return 0;                                                                  \\
  }
#define YES                                                                    \\
  {                                                                            \\
    cout << "YES" << endl;                                                     \\
    return 0;                                                                  \\
  }
#define NO                                                                     \\
  {                                                                            \\
    cout << "NO" << endl;                                                      \\
    return 0;                                                                  \\
  }
#define Yes                                                                    \\
  {                                                                            \\
    cout << "Yes" << endl;                                                     \\
    return 0;                                                                  \\
  }
#define No                                                                     \\
  {                                                                            \\
    cout << "No" << endl;                                                      \\
    return 0;                                                                  \\
  }
#define uniq(a)                                                                \\
  sort(all(a));                                                                \\
  (a).resize(unique(all(a)) - a.begin());
#define dab(v)                                                                 \\
  for (auto i : v)                                                             \\
    cout << i << ' ' << endl;
#define vin(v)                                                                 \\
  for (ll i = 0; i < v.size(); ++i)                                            \\
    cin >> v[i];
#define vin2(v, w)                                                             \\
  for (ll i = 0; i < v.size(); ++i)                                            \\
    cin >> v[i] >> w[i];
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};
int gcd(int a, int b) {
  if (a % b == 0) {
    return (b);
  } else {
    return (gcd(b, a % b));
  }
}

template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  // cout << fixed << setprecision(18);

  long long N;
  cin >> N;
  // cout << divisor_num(N) << endl;
  int cnt = 0;
  repk(i, 1, N) {
    // cout << i << " " << divisor_num(i) << endl;
    cnt += divisor_num(i);
  }
  cout << cnt;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> l_l;
typedef pair<int, int> i_i;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef vector<char> vec;
typedef vector<bool> veb;
typedef vector<string> ves;
typedef vector<vector<ll>> vvl;
typedef vector<vector<int>> vvi;
typedef vector<vector<char>> vvec;
typedef vector<vector<bool>> vveb;
typedef vector<vector<string>> vves;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep1(i, n) for (int i = 1; i < (int)(n); i++)
#define rep2(i, n) for (int i = 2; i < (int)(n); i++)
#define repk(i, k, n) for (int i = k; i < (int)(n); i++)
#define rev(v) reverse(v.begin(), v.end())
#define fs first
#define sc second
#define pb push_back
#define pp pop_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define maxel(a) *max_element(all(a))
#define minel(a) *min_element(all(a))
#define acc accumulate
#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))
#define mod (1000000007)
typedef long long int64;
// const int64 INF = 1LL << 58;
#define dame                                                                   \\
  {                                                                            \\
    puts("-1");                                                                \\
    return 0;                                                                  \\
  }
#define YES                                                                    \\
  {                                                                            \\
    cout << "YES" << endl;                                                     \\
    return 0;                                                                  \\
  }
#define NO                                                                     \\
  {                                                                            \\
    cout << "NO" << endl;                                                      \\
    return 0;                                                                  \\
  }
#define Yes                                                                    \\
  {                                                                            \\
    cout << "Yes" << endl;                                                     \\
    return 0;                                                                  \\
  }
#define No                                                                     \\
  {                                                                            \\
    cout << "No" << endl;                                                      \\
    return 0;                                                                  \\
  }
#define uniq(a)                                                                \\
  sort(all(a));                                                                \\
  (a).resize(unique(all(a)) - a.begin());
#define dab(v)                                                                 \\
  for (auto i : v)                                                             \\
    cout << i << ' ' << endl;
#define vin(v)                                                                 \\
  for (ll i = 0; i < v.size(); ++i)                                            \\
    cin >> v[i];
#define vin2(v, w)                                                             \\
  for (ll i = 0; i < v.size(); ++i)                                            \\
    cin >> v[i] >> w[i];
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};
int gcd(int a, int b) {
  if (a % b == 0) {
    return (b);
  } else {
    return (gcd(b, a % b));
  }
}

template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  // cout << fixed << setprecision(18);

  long long N;
  cin >> N;
  long long int cnt = 0;

  repk(i, 1, N) {
    cnt += floor((double)(N - 1) / (double)i);
    // cout << i << " " << cnt << endl;
  }
  cout << cnt;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
#define ll long long
#define f first
#define s second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pii pair<long long, long long>
#define all(x) x.begin(), x.end()
#define fix fixed << setprecision(10)
#define rep(i, a, b) for (int i = int(a); i <= int(b); i++)

vector<ll> adj[N];
bool visited[N];
int main() {

  ll n;
  cin >> n;
  ll ans = 0;
  for (int i = 1; i < n; i++) {
    ll k = n - i;
    set<ll> s;
    for (int j = 1; j * j <= k; j++) {
      if (k % j == 0) {
        s.insert(j);
        s.insert(k / j);
      }
    }
    ans += s.size();
  }
  cout << ans << endl;
  // getch();
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
#define ll long long
#define f first
#define s second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pii pair<long long, long long>
#define all(x) x.begin(), x.end()
#define fix fixed << setprecision(10)
#define rep(i, a, b) for (int i = int(a); i <= int(b); i++)

vector<ll> adj[N];
bool visited[N];
const int MAX = 1000001;

// array to store prime factors
int factor[MAX] = {0};

// function to generate all prime factors
// of numbers from 1 to 10^6
void generatePrimeFactors() {
  factor[1] = 1;

  // Initializes all the positions with their value.
  for (int i = 2; i < MAX; i++)
    factor[i] = i;

  // Initializes all multiples of 2 with 2
  for (int i = 4; i < MAX; i += 2)
    factor[i] = 2;

  // A modified version of Sieve of Eratosthenes to
  // store the smallest prime factor that divides
  // every number.
  for (int i = 3; i * i < MAX; i++) {
    // check if it has no prime factor.
    if (factor[i] == i) {
      // Initializes of j starting from i*i
      for (int j = i * i; j < MAX; j += i) {
        // if it has no prime factor before, then
        // stores the smallest prime divisor
        if (factor[j] == j)
          factor[j] = i;
      }
    }
  }
}

// function to calculate number of factors
int calculateNoOFactors(int n) {
  if (n == 1)
    return 1;

  int ans = 1;

  // stores the smallest prime number
  // that divides n
  int dup = factor[n];

  // stores the count of number of times
  // a prime number divides n.
  int c = 1;

  // reduces to the next number after prime
  // factorization of n
  int j = n / factor[n];

  // false when prime factorization is done
  while (j != 1) {
    // if the same prime number is dividing n,
    // then we increase the count
    if (factor[j] == dup)
      c += 1;

    /* if its a new prime factor that is factorizing n,
       then we again set c=1 and change dup to the new
       prime factor, and apply the formula explained
       above. */
    else {
      dup = factor[j];
      ans = ans * (c + 1);
      c = 1;
    }

    // prime factorizes a number
    j = j / factor[j];
  }

  // for the last prime factor
  ans = ans * (c + 1);
  return ans;
}
int main() {

  ll n;
  cin >> n;
  generatePrimeFactors();
  ll ans = 0;
  for (int i = 1; i < n; i++) {
    int k = n - i;
    ans += calculateNoOFactors(k);
  }
  cout << ans << endl;
  // getch();
  return 0;
}


#include <algorithm>
#include <bitset>
#include <cmath>
#include <complex>
#include <ctime>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

// #include <boost/multiprecision/cpp_int.hpp>
// namespace mp = boost::multiprecision;

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef int itn;
const ll LINF = 1e18;
const int INF = 1e9;

// マクロ定義
#define vvint(vec, n, m, l)                                                    \\
  vector<vector<int>> vec(n, vector<int>(m, l)); // lで初期化
#define vvll(vec, n, m, l) vector<vector<ll>> vec(n, vector<ll>(m, l));
#define vint vector<int>
#define pint pair<int, int>
#define rep(i, a) for (ll i = 0; i < (a); i++)
#define all(x) (x).begin(), (x).end()
#define debug system("pause") // デバッグ用
#define ret return 0

template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}

using Graph = vector<vector<ll>>;

#define ketasitei setprecision(15) // 15桁表示

const ll MOD = 1000000007;
const double PI = 3.1415926535897932;

int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << ketasitei;

  ll n;
  cin >> n;
  ll ans = 0;
  for (ll c = 1; c <= n; c++) {
    for (ll a = 1; a * a <= n - c; a++) {
      ll b = (n - c) / a;
      if (a * b + c == n) {
        if (a == b)
          ans++;
        else
          ans += 2;
      }
    }
  }
  cout << ans << endl;

  return 0;
}

#include <algorithm>
#include <bitset>
#include <cmath>
#include <complex>
#include <ctime>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

// #include <boost/multiprecision/cpp_int.hpp>
// namespace mp = boost::multiprecision;

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef int itn;
const ll LINF = 1e18;
const int INF = 1e9;

// マクロ定義
#define vvint(vec, n, m, l)                                                    \\
  vector<vector<int>> vec(n, vector<int>(m, l)); // lで初期化
#define vvll(vec, n, m, l) vector<vector<ll>> vec(n, vector<ll>(m, l));
#define vint vector<int>
#define pint pair<int, int>
#define rep(i, a) for (ll i = 0; i < (a); i++)
#define all(x) (x).begin(), (x).end()
#define debug system("pause") // デバッグ用
#define ret return 0

template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}

using Graph = vector<vector<ll>>;

#define ketasitei setprecision(15) // 15桁表示

const ll MOD = 1000000007;
const double PI = 3.1415926535897932;

int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << ketasitei;

  ll n;
  cin >> n;
  ll ans = 0;
  for (ll a = 1; a <= n; a++) {
    ll b = n / a;
    if (a * b == n)
      ans += max(0LL, b - 1);
    else
      ans += b;
  }
  cout << ans << endl;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, result = 0;
  cin >> N;

  for (int c = 1; c < N; c++) {
    int tmp = N - c;
    int index = sqrt(tmp);
    for (int a = 1; a <= index; a++) {
      if (tmp % a == 0) {
        result += 2;
        if (a == tmp / a) {
          result -= 1;
        }
      }
    }
  }
  cout << result << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, result = 0;
  cin >> N;

  for (int c = 1; c < N; c++) {
    int tmp = N - c;
    int index = sqrt(tmp);
    for (int a = 1; a <= index; a++) {
      if (tmp % a == 0) {
        result += 2;
      }
    }
    if (index * index == tmp) {
      result -= 1;
    }
  }
  cout << result << endl;
}


#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rrep(i, n) for (int i = n - 1; i >= 0; i--)
#define all(x) (x).begin(), (x).end()    // 昇順ソート
#define rall(v) (v).rbegin(), (v).rend() // 降順ソート
#define FastIO ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
typedef long long ll;
using P = pair<int, int>;
using VI = vector<int>;
using VVI = vector<vector<int>>;
using VL = vector<ll>;
using VVL = vector<vector<ll>>;
using VP = vector<P>;
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

vector<ll> enumerate_num(ll x) {
  vector<ll> res;
  for (ll i = 1; i * i <= x; i++) {
    if (x % i == 0) {
      res.push_back(i);
      if (i * i != x)
        res.push_back(x / i);
    }
  }
  return res;
}

int main() {
  int n;
  cin >> n;
  ll ans = 0;
  for (int x = n - 1; x >= 1; x--) {
    for (ll i = 1; i * i <= x; i++) {
      if (x % i == 0) {
        ans += 2;
        if (i * i == x)
          ans--;
      }
    }
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rrep(i, n) for (int i = n - 1; i >= 0; i--)
#define all(x) (x).begin(), (x).end()    // 昇順ソート
#define rall(v) (v).rbegin(), (v).rend() // 降順ソート
#define FastIO ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
typedef long long ll;
using P = pair<int, int>;
using VI = vector<int>;
using VVI = vector<vector<int>>;
using VL = vector<ll>;
using VVL = vector<vector<ll>>;
using VP = vector<P>;
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

int main() {
  int n;
  cin >> n;
  ll ans = 0;
  for (int a = 1; a < n; a++) {
    ans += (n - 1) / a;
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000000000000000
#define io                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define pb push_back
#define endl '\\n'
#define pii pair<ll, pair<ll, char>>
const ll mod = 1000000007;
ll n;
ll countWays(int n1) {
  int count = 0;
  for (int i = 1; i * i <= n1; i++) {
    if (n1 % i == 0 && i * i != n1)
      count += 2;
    else if (n1 % i == 0 && i * i == n1)
      count += 1;
  }

  return count;
}
ll solve() {
  cin >> n;
  ll ans = 0;
  for (int i = 1; i <= n - 1; i++) {
    ans += countWays(n - i);
  }
  return ans;
}
int main() {
  io ll t = 1;
  // cin>>t;
  while (t--) {
    cout << solve() << endl;
    // solve();
  }
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000000000000000
#define io                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define pb push_back
#define endl '\\n'
#define pii pair<ll, pair<ll, char>>
const ll mod = 1000000007;
// ll n;
const int MAX = 1000001;

// array to store prime factors
int factor[MAX] = {0};

// function to generate all prime factors
// of numbers from 1 to 10^6
void generatePrimeFactors() {
  factor[1] = 1;

  // Initializes all the positions with their value.
  for (int i = 2; i < MAX; i++)
    factor[i] = i;

  // Initializes all multiples of 2 with 2
  for (int i = 4; i < MAX; i += 2)
    factor[i] = 2;

  // A modified version of Sieve of Eratosthenes to
  // store the smallest prime factor that divides
  // every number.
  for (int i = 3; i * i < MAX; i++) {
    // check if it has no prime factor.
    if (factor[i] == i) {
      // Initializes of j starting from i*i
      for (int j = i * i; j < MAX; j += i) {
        // if it has no prime factor before, then
        // stores the smallest prime divisor
        if (factor[j] == j)
          factor[j] = i;
      }
    }
  }
}

// function to calculate number of factors
int calculateNoOFactors(int n) {
  if (n == 1)
    return 1;

  int ans = 1;

  // stores the smallest prime number
  // that divides n
  int dup = factor[n];

  // stores the count of number of times
  // a prime number divides n.
  int c = 1;

  // reduces to the next number after prime
  // factorization of n
  int j = n / factor[n];

  // false when prime factorization is done
  while (j != 1) {
    // if the same prime number is dividing n,
    // then we increase the count
    if (factor[j] == dup)
      c += 1;

    /* if its a new prime factor that is factorizing n,
       then we again set c=1 and change dup to the new
       prime factor, and apply the formula explained
       above. */
    else {
      dup = factor[j];
      ans = ans * (c + 1);
      c = 1;
    }

    // prime factorizes a number
    j = j / factor[j];
  }

  // for the last prime factor
  ans = ans * (c + 1);

  return ans;
}
ll solve() {
  ll n;
  cin >> n;
  ll ans = 0;
  generatePrimeFactors();
  for (int i = 1; i <= n - 1; i++) {
    ans += calculateNoOFactors(n - i);
  }
  return ans;
}
int main() {
  io ll t = 1;
  // cin>>t;
  while (t--) {
    cout << solve() << endl;
    // solve();
  }
}


#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int(i) = 0; i < (n); i++)
typedef long long ll;
ll n, ans = 0;

void divisor(ll n) {
  for (ll i = 1; i * i <= n; i++)
    if (!(n % i)) {
      if (i != n / i)
        ans += 2;
      else
        ans++;
    }
}

int main() {
  cin >> n;
  for (int i = 1; i <= n - 1; i++)
    divisor(n - i);
  cout << ans;
}

#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int(i) = 0; i < (n); i++)
typedef long long ll;
ll n, ans = 0;

int main() {
  cin >> n;
  for (int i = 1; i <= n; i++)
    ans += (n - 1) / i;
  cout << ans;
}


#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
const int MOD = 1e9 + 7;
using ll = long long;
using vi = vector<int>;
#define rep(i, n) for (int i = 0; i < n; i++)
#define ALL(x) x.begin(), x.end()
using namespace std;
template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}

long long N, ans = 0;

int main() {
  cin >> N;
  rep(i, N) { ans += divisor_num(i); }
  ans -= 2;
  cout << ans << endl;
  return 0;
}

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int MOD = 1e9 + 7;
using ll = long long;
using vi = vector<int>;
#define rep(i, n) for (int i = 0; i < n; i++)
#define ALL(x) x.begin(), x.end()

using namespace std;
int main() {
  vi ans(1000001, 0);
  for (int i = 1; i < 1000000; i++) {
    for (int j = 1; j < 1000000; j++) {
      if (i * j > 1000000)
        break;
      ans.at(i * j)++;
    }
  }
  ll a, tmp = 0;
  cin >> a;
  rep(i, a) { tmp += ans.at(i); }
  cout << tmp;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, ans = 0;
  cin >> N;

  int A = 1, B = 1, C = 1;

  int sum = 0;
  // Aの操作
  while (sum <= N / 2) {
    if (A * B > N) {
      break;
    }
    // Bの操作
    while (sum <= N / 2) {
      if (A * B > N) {
        break;
      }
      // Cの操作
      while (sum <= N) {
        // 計算
        sum = A * B + C;
        // Nと一致したら
        if (sum == N) {
          ans++;
        }
        sum = 0;
        C++;
      }
      C = 1;
      B++;
    }
    B = 1;
    C = 1;
    A++;
  }

  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;

  long long ans = 0;

  for (long long a = 1; a < N; a++) {
    for (long long b = a; a * b < N; b++) {
      if (a == b) {
        ans++;
      } else {
        ans += 2;
      }
    }
  }

  cout << ans << endl;
}


/* It's a shot in the dark
                                But I will make it */
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 1000000000;

bool cmp(pair<int, int> a, pair<int, int> b) { return a.second < b.second; }

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    int x = n - i;
    for (int j = 1; j <= sqrt(x); j++) {
      if (x % j == 0) {
        if (j != x / j) {
          cnt += 2;
        } else {
          cnt++;
        }
      }
    }
  }
  cout << cnt << "\\n";
}

/* It's a shot in the dark
                                But I will make it */
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 1000000000;

bool cmp(pair<int, int> a, pair<int, int> b) { return a.second < b.second; }

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    int op = (n - 1) / i;
    cnt += op;
  }
  cout << cnt << "\\n";
}


#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n;
  cin >> n;
  long long cnt = 0, nt;
  for (long long c = 1; c <= n; c++) {
    nt = n - c;
    for (long long i = 1; i * i <= nt; i++) {
      if (nt % i == 0) {
        if (nt / i == i)
          cnt = cnt + 1;
        else
          cnt = cnt + 2;
      }
    }
  }
  cout << cnt;
}

#include <iostream>
using namespace std;
int main() {
  long long n;
  cin >> n;
  long long ans = 0;
  for (long long i = 1; i < n; i++) {
    ans = ans + ((n - 1) / i);
  }
  cout << ans;
}


#include <iostream>
using namespace std;

int main() {
  int n;
  int ans = 0;
  int i, j, k;
  cin >> n;

  for (i = 1; i < n; i++) {
    for (j = 1; j < n; j++) {
      for (k = 1; k < n; k++) {
        if ((i * j + k) == n)
          ans++;
      }
    }
  }
  cout << ans << endl;

  return 0;
}

#include <iostream>
using ll = long long;
using namespace std;

int main() {
  int n;
  cin >> n;
  ll ans = 0;
  for (int a = 1; a <= n; a++) {
    ans += (n - 1) / a;
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
#define int long long
#define vi vector<int>
#define pb push_back
#define For(i, n) for (int i = 0; i < n; i++)
#define MOD 1000000007
#define MAX 100005
using namespace std;
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
#ifndef ONLINE_JUDGE
  freopen("input1.txt", "r", stdin);
  freopen("output1.txt", "w", stdout);
#endif
  int n, cnt = 0, res = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u = n - i;
    int t = sqrt(n - i);
    for (int j = 1; j <= t; j++) {
      if (u % j == 0) {
        if (u / j == j) {
          res++;
        } else {
          res += 2;
        }
      }
    }
  }
  cout << res;
}

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  ll res = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u = n - i;
    float t = sqrt(u);
    for (int j = 1; j <= t; j++) {
      if (u % j == 0) {
        if (j == t) {
          res++;
        } else {
          res += 2;
        }
      }
    }
  }
  cout << res << endl;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  long long N;
  cin >> N;

  long long ans = 0;
  for (long long i = 1; i < N; i++) {
    long long M = N - i;

    if (M % 2 != 0) {
      long long j = 1;
      while (true) {
        if (j * j == M) {
          ans++;
        } else if (M % j == 0) {
          ans = ans + 2;
        }
        j = j + 2;
        if (j * j > M) {
          break;
        }
      }

    } else {
      long long j = 1;
      while (true) {
        if (j * j == M) {
          ans++;
        } else if (M % j == 0) {
          ans = ans + 2;
        }
        j++;
        if (j * j > M) {
          break;
        }
      }
    }
  }

  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int64_t N;
  cin >> N;

  int64_t ans = 0;
  for (int64_t i = 1; i < N; i++) {
    ans += (N - 1) / i;
  }

  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long int

int divCount(int n) {
  bool hash[n + 1];
  memset(hash, true, sizeof(hash));
  for (int p = 2; p * p < n; p++)
    if (hash[p] == true)
      for (int i = p * 2; i < n; i += p)
        hash[i] = false;
  int total = 1;
  for (int p = 2; p <= n; p++) {
    if (hash[p]) {
      int count = 0;
      if (n % p == 0) {
        while (n % p == 0) {
          n = n / p;
          count++;
        }
        total = total * (count + 1);
      }
    }
  }
  return total;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int N;
  cin >> N;
  int i, j, k;
  ll ans = 0;
  for (i = 1; i < N; i++) {
    int w = N - i;
    ll e = (ll)divCount(w);
    ans += e;
  }
  cout << ans;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long int

int divCount(int n) {
  int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      // If divisors are equal,
      // count only one
      if (n / i == i)
        cnt++;

      else // Otherwise count both
        cnt = cnt + 2;
    }
  }
  return cnt;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int N;
  cin >> N;
  int i, j, k;
  ll ans = 0;
  for (i = 1; i < N; i++) {
    int w = N - i;
    ll e = (ll)divCount(w);
    ans += e;
  }
  cout << ans;
}


/*Read the problem carefully before starting to work on it*/
#include <bits/stdc++.h>
// #include <boost/multiprecision/cpp_int.hpp>
// using namespace boost::multiprecision;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
using namespace std;
// using namespace __gnu_pbds;

typedef long long ll;

#define pb push_back
#define eb emplace_back
#define mp(x, y) make_pair(x, y)
#define mod 1000000007

double PI = 3.1415926535897932384626;

// template<typename T> T power(T x,T y,ll m=mod){T ans=1;while(y>0){if(y&1LL)
// ans=(ans*x)%m;y>>=1LL;x=(x*x)%m;}return ans%m;}

// typedef
// tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
// ost;

// mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
// #define rnd(x, y) uniform_int_distribution<ll>(x, y)(rng)

// struct custom_hash {
//     static uint64_t splitmix64(uint64_t x) {
//         // http://xorshift.di.unimi.it/splitmix64.c
//         x += 0x9e3779b97f4a7c15;
//         x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
//         x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
//         return x ^ (x >> 31);
//     }
//     size_t operator()(uint64_t x) const {
//         static const uint64_t FIXED_RANDOM =
//             chrono::steady_clock::now().time_since_epoch().count();
//         return splitmix64(x + FIXED_RANDOM);
//     }
// };

#define fi first
#define se second

int main() {
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll c = 1; c < n; c++) {
    ll diff = n - c;
    for (ll j = 1; j * j <= diff; j++) {
      if (diff % j != 0)
        continue;
      ans++;
      if ((diff / j) != j) {
        ans++;
      }
    }
  }
  cout << ans << endl;
  return 0;
}

// 252908XL

/*
comments:-

*/

/*Read the problem carefully before starting to work on it*/
#include <bits/stdc++.h>
// #include <boost/multiprecision/cpp_int.hpp>
// using namespace boost::multiprecision;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
using namespace std;
// using namespace __gnu_pbds;

typedef long long ll;

#define pb push_back
#define eb emplace_back
#define mp(x, y) make_pair(x, y)
#define mod 1000000007

double PI = 3.1415926535897932384626;

// template<typename T> T power(T x,T y,ll m=mod){T ans=1;while(y>0){if(y&1LL)
// ans=(ans*x)%m;y>>=1LL;x=(x*x)%m;}return ans%m;}

// typedef
// tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
// ost;

// mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
// #define rnd(x, y) uniform_int_distribution<ll>(x, y)(rng)

// struct custom_hash {
//     static uint64_t splitmix64(uint64_t x) {
//         // http://xorshift.di.unimi.it/splitmix64.c
//         x += 0x9e3779b97f4a7c15;
//         x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
//         x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
//         return x ^ (x >> 31);
//     }
//     size_t operator()(uint64_t x) const {
//         static const uint64_t FIXED_RANDOM =
//             chrono::steady_clock::now().time_since_epoch().count();
//         return splitmix64(x + FIXED_RANDOM);
//     }
// };

#define fi first
#define se second

#define MAX 1000006

bool v[MAX];
int len, sp[MAX];

void Sieve() {
  for (ll i = 2; i < MAX; i += 2)
    sp[i] = 2; // even numbers have smallest prime factor 2
  for (ll i = 3; i < MAX; i += 2) {
    if (!v[i]) {
      sp[i] = i;
      for (ll j = i; (j * i) < MAX; j += 2) {
        if (!v[j * i])
          v[j * i] = true, sp[j * i] = i;
      }
    }
  }
}

int main() {
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  Sieve();
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll c = 1; c < n; c++) {
    ll diff = n - c;
    map<ll, ll> cry;
    while (diff > 1) {
      cry[sp[diff]]++;
      diff /= sp[diff];
    }
    ll naw = 1;
    for (auto &noo : cry) {
      naw *= (noo.se + 1);
    }
    ans += naw;
  }
  cout << ans << endl;
  return 0;
}

// 252908XL

/*
comments:-

*/


#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ff first
#define ss second
#define e endl

void solve() {
  ll n;
  cin >> n;
  ll count = 0;
  for (ll i = 1; i < n; i++) {
    ll c = 0;
    for (ll j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        if (i / j == j)
          c++;
        else
          c += 2;
      }
    }

    count += c;
  }
  cout << count << e;
}

int main() {
  // ll t; cin >> t; while (t--)
  solve();
}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ff first
#define ss second
#define e endl

void solve() {
  ll n;
  cin >> n;
  ll count = 0;
  for (ll i = 1; i < n; i++) {
    count += n / i;
    if (n % i == 0)
      count--;
  }
  cout << count << e;
}

int main() {
  // ll t; cin >> t; while (t--)
  solve();
}


#include <bits/stdc++.h>
using namespace std;
// 素因数分解
template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}
long long N;
int main() {
  cin >> N;
  long long ans = 0;
  for (int i = 1; i < N; i++) {
    ans += divisor_num(i);
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep2(i, x, n) for (int i = x; i < (n); i++)
#define all(n) begin(n), end(n)
typedef long long ll;
const ll mod = pow(10, 9) + 7;
int main() {
  ll n;
  cin >> n;

  ll ans = 0;

  for (int i = 1; i < n; i++) {
    ans += (n - 1) / i;
  }

  cout << ans << endl;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m = 0, max = 0, a, b;
  cin >> n;
  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; j++) {
      if (n - i * j > 0)
        m++;
    }
  }
  cout << m << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m = 0, max = 0, a, b;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int j = n / i;
    if (i * j < n) {
      m = m + j;
    } else
      m = m + j - 1;
  }
  cout << m << endl;
  return 0;
}


#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
#define fastIO                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define what_is(x) cerr << #x << " = " << x << endl;
ll p2[1009];
int main() {
  fastIO int n;
  cin >> n;
  int ans = 0;
  for (int i = n - 1; i >= 1; --i) {
    int x = i;
    for (int j = 1; j * j <= x; ++j) {
      if (x % j == 0) {
        if (x / j == j)
          ++ans;
        else
          ans += 2;
      }
    }
  }
  cout << ans;
}

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
#define fastIO                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define what_is(x) cerr << #x << " = " << x << endl;
bool pr[1000009];
void sieve() {
  pr[0] = 1;
  pr[1] = 1;
  for (int i = 2; i <= 1000000; ++i) {
    if (pr[i] == 0) {
      for (int j = i * 2; j <= 1000000; j += i) {
        pr[j] = 1;
      }
    }
  }
}
int divv[1000009];
int main() {
  fastIO for (int i = 1; i <= 1000000; ++i) {
    for (int j = i; j <= 1000000; j += i) {
      divv[j]++;
    }
  }

  int n;
  cin >> n;
  int ans = 0;
  for (int i = n - 1; i >= 1; --i) {
    ans += divv[i];
  }
  cout << ans;
}


#include <bits/stdc++.h>
using namespace std;
int main() {
  long long N;
  cin >> N;
  long long res = 0;
  for (int i = 1; i < N; i++) {
    for (long long a = 1; a * a <= N - i; a++) {
      if ((N - i) % a == 0) {
        if ((N - i) / a == a) {
          res++;
        } else {
          res = res + 2;
        }
      }
    }
  }
  cout << res << endl;
}

#include <bits/stdc++.h>
using namespace std;
int main() {
  long long N;
  cin >> N;
  long long res = 0;
  for (long long a = 1; a < N; a++) {
    res += (N - 1) / a;
  }
  cout << res << endl;
}


#include <iostream>
#include <math.h>
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);

  int n;
  cin >> n;

  long long count = 0;

  for (int c = 1; c < n; c++) {
    int d = n - c;
    for (int a = 1; a <= sqrt(d); a++)
      if (d % a == 0) {
        count++;
        if (d / a != a)
          count++;
      }
  }
  cout << count;

  return 0;
}

#include <iostream>
#include <math.h>
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);

  int n;
  cin >> n;

  long long count = 0;

  for (int a = 1; a < n; a++) {
    for (int b = 1; b < n; b++) {
      if (a * b < n)
        count++;
      else
        break;
    }
  }

  cout << count;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 1000000007
int a[100005];
int main() {
  int n;
  cin >> n;
  int num = 0;
  for (int i = 1; i <= n - 1; i++) {
    int tmp = n - i;
    for (int j = 1; j <= sqrt(tmp); j++) {
      if (tmp % j == 0) {
        if (j == tmp / j)
          num += 1;
        else
          num += 2;
      }
    }
  }
  cout << num << endl;
  return 0;
}

#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
typedef long long ll;

int main() {
  int n;
  cin >> n;
  n--;
  ll ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += n / i;
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
#define LL long long int
#define PB push_back
using namespace std;

LL divCount(LL n) {
  bool hash[n + 1];
  memset(hash, true, sizeof(hash));
  for (LL p = 2; p * p < n; p++)
    if (hash[p])
      for (LL i = p * 2; i < n; i += p)
        hash[i] = false;
  LL total = 1;
  for (LL p = 2; p <= n; p++) {
    if (hash[p]) {
      LL count = 0;
      if (n % p == 0) {
        while (n % p == 0) {
          n = n / p;
          count++;
        }
        total = total * (count + 1);
      }
    }
  }
  return total;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  // LL t; cin>>t;
  // while(t--){

  // }
  LL n;
  cin >> n;
  LL sum = 0;
  for (LL i = n - 1; i >= 1; i--) {
    sum += divCount(i);
  }
  cout << sum;
}

#include <bits/stdc++.h>
#define LL long long int
#define PB push_back
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  // LL t; cin>>t;
  // while(t--){

  // }
  LL n;
  cin >> n;
  LL sum = 0;
  for (int i = 1; i < n; i++) {
    sum += (n - 1) / i;
  }
  cout << sum;
}


#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n;
  cin >> n;
  int aa = 0;
  for (int i = 2; i < n; i++) {
    for (int j = 1; j < n; j++) {
      if (i * j < n) {
        aa++;
      }
    }
  }
  cout << aa + n - 1 << endl;
  return (0);
}

#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n;
  cin >> n;
  int aa = 0;
  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; j++) {
      if (i * j >= n) {
        break;
      }
      aa++;
    }
  }
  cout << aa << endl;
  return (0);
}


#include <cmath>
#include <iostream>
using namespace std;

#define ll long long
#define ull unsigned long long
#define ld long double
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define pb push_back
#define er erase
#define line cout << "\\n";
#define mod 1000000007
long long calculatedivisors(long long n) {
  long long cnt = 0;
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) {

      if (n / i == i)
        cnt++;

      else
        cnt = cnt + 2;
    }
  }
  return cnt;
}

int main() {
  ll n;
  cin >> n;

  long long sum = 0;
  for (long long x = n - 1; x >= 2; x--) {
    long long temp = calculatedivisors(x);
    sum += temp;
  }
  cout << sum + 1;
}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ull unsigned long long
#define ld long double
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define pb push_back
#define er erase
#define line cout << "\\n";
#define mod 1000000007

int main() {
  fast ll n;
  cin >> n;
  ll sum = 0;
  for (ll x = 1; x < n; x++) {
    for (ll j = 1; j < n; j++) {
      if (x * j < n)
        sum++;
      else
        break;
    }
  }
  cout << sum << "\\n";
  return 0;
}


#include <iostream>
using namespace std;

int main(void) {
  int n;
  cin >> n;
  int a = 0;
  for (int i = 1; i < n; i++) {
    a = a + (n - 1) / a;
  }
  cout << a << endl;
}

#include <iostream>
using namespace std;

int main(void) {
  int n;
  int a = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    a = a + (n - 1) / i;
  }
  cout << a << endl;
}


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define ll long long
#define dd double
#define MOD1 1000000007
#define MOD2 998244353
#define nl cout << endl
#define rt ll Q[100005] = {0}
#define mp make_pair
#define test()                                                                 \\
  ll t;                                                                        \\
  cin >> t;                                                                    \\
  while (t--)
#define pb push_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define s(ar, n) sort(ar, ar + n)
#define rs(ar, n) sort(ar, ar + n, greater<ll>())
#define oa(a, n)                                                               \\
  for (ll i = 0; i < n; i++)                                                   \\
    cout << a[i] << " ";                                                       \\
  nl
#define cn(a, n)                                                               \\
  for (ll i = 0; i < n; i++)                                                   \\
    cin >> a[i];
#define ov(a, n)                                                               \\
  for (ll i = n - 1; i >= 0; i--)                                              \\
    cout << a[i] << " ";                                                       \\
  nl
#define ovp(a, n)                                                              \\
  for (ll i = 0; i < n; i++)                                                   \\
    cout << a[i].ff << " " << a[i].ss << endl;
#define maxa(ar, N) *max_element(ar, ar + N)
#define mina(ar, N) *min_element(ar, ar + N)
#define fastio()                                                               \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
typedef pair<ll, ll> pii;
ll powe(ll n, ll m) {
  if (m == 0)
    return 1;
  ll t = powe(n, m / 2);
  if (m % 2 == 0)
    return (t * t);
  return (((t * t)) * n);
}
ll mpowe(ll n, ll m, ll MOD) {
  if (m == 0)
    return 1;
  ll t = mpowe(n, m / 2, MOD);
  t %= MOD;
  if (m % 2 == 0)
    return (t * t) % MOD;
  return (((t * t) % MOD) * n) % MOD;
}
ll logtwo(ll n) {
  if (n == 1)
    return 0;
  if (n == 0)
    return -1;
  return logtwo(n / 2) + 1;
}
int main() {
  fastio();

  ll n;
  cin >> n;
  ll ans = 1;
  for (int i = 2; i < n; i++) {
    ll temp = 1, x = i;
    for (int j = 2; j * j <= i; j++) {
      ll c = 0;
      if (x % j == 0) {
        while (x % j == 0) {
          c++;
          x = x / j;
        }
        temp *= (c + 1);
      }
    }
    if (x > 1)
      temp *= 2;
    // cout<<i<<" "<<temp<<endl;
    ans += temp;
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define ll long long
#define dd double
#define MOD1 1000000007
#define MOD2 998244353
#define nl cout << endl
#define rt ll Q[100005] = {0}
#define mp make_pair
#define test()                                                                 \\
  ll t;                                                                        \\
  cin >> t;                                                                    \\
  while (t--)
#define pb push_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define s(ar, n) sort(ar, ar + n)
#define rs(ar, n) sort(ar, ar + n, greater<ll>())
#define oa(a, n)                                                               \\
  for (ll i = 0; i < n; i++)                                                   \\
    cout << a[i] << " ";                                                       \\
  nl
#define cn(a, n)                                                               \\
  for (ll i = 0; i < n; i++)                                                   \\
    cin >> a[i];
#define ov(a, n)                                                               \\
  for (ll i = n - 1; i >= 0; i--)                                              \\
    cout << a[i] << " ";                                                       \\
  nl
#define ovp(a, n)                                                              \\
  for (ll i = 0; i < n; i++)                                                   \\
    cout << a[i].ff << " " << a[i].ss << endl;
#define maxa(ar, N) *max_element(ar, ar + N)
#define mina(ar, N) *min_element(ar, ar + N)
#define fastio()                                                               \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
typedef pair<ll, ll> pii;
ll powe(ll n, ll m) {
  if (m == 0)
    return 1;
  ll t = powe(n, m / 2);
  if (m % 2 == 0)
    return (t * t);
  return (((t * t)) * n);
}
ll mpowe(ll n, ll m, ll MOD) {
  if (m == 0)
    return 1;
  ll t = mpowe(n, m / 2, MOD);
  t %= MOD;
  if (m % 2 == 0)
    return (t * t) % MOD;
  return (((t * t) % MOD) * n) % MOD;
}
ll logtwo(ll n) {
  if (n == 1)
    return 0;
  if (n == 0)
    return -1;
  return logtwo(n / 2) + 1;
}
int main() {
  fastio();

  ll n;
  cin >> n;
  ll ans = 1;
  for (int i = 2; i < n; i++) {
    ll temp = 1, x = i;
    for (int j = 2; j * j <= x; j++) {
      ll c = 0;
      if (x % j == 0) {
        while (x % j == 0) {
          c++;
          x = x / j;
        }
        temp *= (c + 1);
      }
    }
    if (x > 1)
      temp *= 2;
    // cout<<i<<" "<<temp<<endl;
    ans += temp;
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define mod 1000000007

ll countWays(ll n) {
  ll count = 0;
  for (ll i = 1; i * i <= n; i++) {
    if (i * i == n)
      count++;
    else if (n % i == 0)
      count += 2;
  }
  return count;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll i = 1; i < n; i++) {
    ans += countWays(i);
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define mod 998244353

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll i = 1; i <= n - 1; i++) {
    ans += (n - 1) / i;
  }
  cout << ans << endl;
  return 0;
}


/*COMPETITIVE PROGRAMMING C++ TEMPLATE */

#include <algorithm>
#include <climits>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define all(x) x.begin(), x.end()
#define debug(x) cout << #x << " = " << x << "\\n"
#define MOD 1000000007

const long double PI = 3.141592653589793236L;

typedef long long int ll;
typedef long double ld;

using namespace std;

ll count_factors(ll n) {
  ll count = 0;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      count++;
      if (n / i != i) {
        count++;
      }
    }
  }

  return count;
}

void solve() {
  int n;
  cin >> n;

  ll count = 0;

  for (int i = 1; i < n; i++) {
    count += count_factors(n - i);
  }

  cout << count << "\\n";
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  int T = 1;
  // cin >> T;

  while (T--) {
    solve();
  }

  return 0;
}

/*COMPETITIVE PROGRAMMING C++ TEMPLATE */

#include <algorithm>
#include <climits>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define all(x) x.begin(), x.end()
#define debug(x) cout << #x << " = " << x << "\\n"
#define MOD 1000000007

const long double PI = 3.141592653589793236L;

typedef long long int ll;
typedef long double ld;

using namespace std;

void solve() {
  int n;
  cin >> n;

  ll count = 0;

  for (int i = 1; i < n; i++) {
    count += (n - 1) / i;
  }

  cout << count << "\\n";
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  int T = 1;
  // cin >> T;

  while (T--) {
    solve();
  }

  return 0;
}


#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
  int n;
  while (cin >> n) {
    int ans = 0;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        for (int k = 1; k <= n; k++) {
          if (i * j + k == n) {
            ans++;
          }
        }
      }
    }

    cout << ans << endl;
  }
}

#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
  int n;
  while (cin >> n) {
    int ans = 0;
    for (int c = 1; c <= n - 1; c++) {
      int check = n - c;
      for (int r = 1; r < sqrt(check); r++) {

        if (check % r == 0) {
          ans += 2;
        }
      }
      if (sqrt(check) - (int)sqrt(check) == 0) {
        ans++;
      }
    }

    cout << ans << endl;
  }
}


#include <bits/stdc++.h>
using namespace std;

int main() {

  int n, x, k, t;

  k = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    x = n - i;
    for (int j = 1; j < x + 1; j++) {
      t = x % j;
      if (t == 0) {
        k = k + 1;
      }
    }
  }

  cout << k;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {

  int n, k;
  k = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    k = k + (n - 1) / i;
  }

  cout << k;
  return 0;
}


/**
 * author: Behradm
 * Created: 2020.09.19 16:26:12
 * In The Name of God
 **/
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  auto Bad = [&](int n) {
    int sq = sqrt(n);
    if (sq * sq == n)
      return true;
    return false;
  };

  vector<int> lanat_be_tle(400001, 0);
  for (int i = 1; i <= 400000; i++) {
    int cnt = 0;
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0)
        cnt += 2;
    }
    if (Bad(i))
      cnt -= 1;
    lanat_be_tle[i] = cnt;
  }
  int n;
  cin >> n;

  // set<array<int, 3>> s;
  int res = 0;
  for (int k = 1; k < n; k++) {
    int cur = n - k;
    if (cur <= 400000) {
      res += lanat_be_tle[cur];
      continue;
    }

    for (int i = 1; i * i <= cur; i++) {
      if (i * i == cur) {
        //        s.insert({i, i, k});
        res += 1;
      }
      if (i * (cur / i) == cur && i != cur / i) {
        //      s.insert({i, cur / i, k});
        //    s.insert({cur / i, i, k});
        res += 2;
      }
      if ((cur / i) * (cur / i) == cur && i != cur / i) {
        //  s.insert({cur / i, cur / i, k});
        res += 1;
      }
    }

    /*int len = (int) d.size();
    for (int i = 0; i < len; i++) {
      for (int j = 0; j < len; j++) {
        if (d[i] * d[j] == cur && d[i] * d[j] + k == n) {
          s.insert({d[i], d[j], k});
        }
      }
    }*/
  }

  cout << res << '\\n';
  return 0;
}

/*
  set<tuple<int, int, int>> s;
  for (int k = 1; k < n; k++) {
    int cur = n - k;
    for (int i = 1; i * i <= cur; i++) {
      if (i * i == cur)
        s.insert(make_tuple(i, i, k));
      if (i * (cur / i) == cur) {
        s.insert(make_tuple(i, cur / i, k));
        s.insert(make_tuple(cur / i, i, k));
      }
      if ((cur / i) * (cur / i) == cur)
        s.insert(make_tuple(cur / i, cur / i, k));
    }
*/

/**
 * author: Behradm
 * Created: 2020.09.19 16:26:12
 * In The Name of God
 **/
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#include <bits/stdc++.h>

using namespace std;

const int N = 600001;
int lanat_be_tle[N];

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  auto Bad = [&](int n) {
    int sq = sqrt(n);
    if (sq * sq == n)
      return true;
    return false;
  };

  int n;
  scanf("%d", &n);

  for (int i = 1; i < N; i++) {
    int cnt = 0;
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0)
        cnt += 2;
    }
    if (Bad(i))
      cnt -= 1;
    lanat_be_tle[i] = cnt;
  }

  int res = 0;
  // set<array<int, 3>> s;
  for (int k = 1; k < n; k++) {
    int cur = n - k;
    if (cur < N) {
      res += lanat_be_tle[cur];
      continue;
    }
    for (int i = 1; i * i <= cur; i++) {
      if (cur % i == 0) {
        res += 2;
      }
    }
    if (Bad(cur))
      res -= 1;

    /*for (int i = 1; i * i <= cur; i++) {
      int a = i, b = cur / i;
      if (a * a == cur) {
//        s.insert({i, i, k});
        res += 1;
      }
      if (a * b == cur && a != b) {
  //      s.insert({i, cur / i, k});
    //    s.insert({cur / i, i, k});
        res += 2;
      }
      if (b * b == cur && a != b) {
      //  s.insert({cur / i, cur / i, k});
        res += 1;
      }
    }*/

    /*int len = (int) d.size();
    for (int i = 0; i < len; i++) {
      for (int j = 0; j < len; j++) {
        if (d[i] * d[j] == cur && d[i] * d[j] + k == n) {
          s.insert({d[i], d[j], k});
        }
      }
    }*/
  }

  printf("%d\\n", res);
  return 0;
}

/*
  set<tuple<int, int, int>> s;
  for (int k = 1; k < n; k++) {
    int cur = n - k;
    for (int i = 1; i * i <= cur; i++) {
      if (i * i == cur)
        s.insert(make_tuple(i, i, k));
      if (i * (cur / i) == cur) {
        s.insert(make_tuple(i, cur / i, k));
        s.insert(make_tuple(cur / i, i, k));
      }
      if ((cur / i) * (cur / i) == cur)
        s.insert(make_tuple(cur / i, cur / i, k));
    }
*/


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;

int main() {
  ll n;
  cin >> n;
  ll res[n + 1];
  res[1] = 0;
  for (ll i = 2; i <= n; i++) {
    ll count = 0;
    for (ll j = 1; j * j <= i - 1; j++) {
      if ((i - 1) % j == 0 && j == (i - 1) / j)
        count++;
      else if ((i - 1) % j == 0 && j != (i - 1) / j)
        count += 2;
    }
    res[i] = res[i - 1] + count;
  }
  cout << res[n] << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;

int main() {
  ll n;
  cin >> n;
  ll res = 0;
  for (ll i = 1; i <= n - 1; i++) {
    res += (n - 1) / i;
  }
  cout << res << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define M_PI 3.14159265358979323846
#define MOD 1000000007
typedef long long ll;
typedef vector<int> vint;
typedef vector<vint> vvint;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef pair<int, int> ipair;
typedef pair<ll, ll> llpair;

template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '{';
  string sep;
  for (const auto &x : v)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <typename T, size_t size>
ostream &operator<<(ostream &os, const array<T, size> &arr) {
  os << '{';
  string sep;
  for (const auto &x : arr)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <typename A, typename B>
ostream &operator<<(ostream &os, const pair<A, B> &p) {
  return os << '(' << p.first << ", " << p.second << ')';
}

void dbg_out() { cerr << endl; }
template <typename Head, typename... Tail> void dbg_out(Head H, Tail... T) {
  cerr << ' ' << H;
  dbg_out(T...);
}

#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)

/*
    Author: Koushik Sahu
    Created: 19 Sep 2020 17:35:55
*/

int n;

int numberOfDivisor(int x) {
  int ans = 0;
  for (int i = 1; i <= sqrt(x); i++) {
    if (x % i == 0) {
      ans += (x / i == i ? 1 : 2);
    }
  }
  return ans;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL), cout.tie(NULL);
  cin >> n;
  int ans = 0;
  for (int c = 1; c < n; c++) {
    ans += numberOfDivisor(n - c);
  }
  cout << ans << "\\n";
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define M_PI 3.14159265358979323846
#define MOD 1000000007
typedef long long ll;
typedef vector<int> vint;
typedef vector<vint> vvint;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef pair<int, int> ipair;
typedef pair<ll, ll> llpair;

template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '{';
  string sep;
  for (const auto &x : v)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <typename T, size_t size>
ostream &operator<<(ostream &os, const array<T, size> &arr) {
  os << '{';
  string sep;
  for (const auto &x : arr)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <typename A, typename B>
ostream &operator<<(ostream &os, const pair<A, B> &p) {
  return os << '(' << p.first << ", " << p.second << ')';
}

void dbg_out() { cerr << endl; }
template <typename Head, typename... Tail> void dbg_out(Head H, Tail... T) {
  cerr << ' ' << H;
  dbg_out(T...);
}

#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)

/*
    Author: Koushik Sahu
    Created: 19 Sep 2020 17:35:55
*/

int n;
array<int, 1000001> dp;

int numberOfDivisor(int x) {
  if (dp[x] != -1)
    return dp[x];
  int ans = 0;
  for (int i = 1; i <= sqrt(x); i++) {
    if (x % i == 0) {
      ans += (x / i == i ? 1 : 2);
    }
  }
  return dp[x] = ans;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL), cout.tie(NULL);
  cin >> n;
  int ans = 0;
  dp.fill(-1);
  for (int c = 1; c < n; c++) {
    ans += numberOfDivisor(n - c);
  }
  cout << ans << "\\n";
  return 0;
}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")

#include <bits/stdc++.h>
#define ll long long
#define endl '\\n'
#define elif else if
#define pb push_back
#define pf push_front
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                  'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                  's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

string s;
int t;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  // freopen("input.txt","r",stdin);
  // freopen("output.txt","w",stdout);
  ll n;
  cin >> n;

  ll cnt = 0;

  for (ll i = 1; i <= n; i++) {
    for (ll j = i; j <= n; j++) {
      ll c = n - (i * j);
      if (c > 0) {
        if (i == j)
          cnt++;
        else
          cnt += 2;
      }
    }
  }
  cout << cnt << endl;
}

/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")

#include <bits/stdc++.h>
#define ll long long
#define endl '\\n'
#define elif else if
#define pb push_back
#define pf push_front
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                  'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                  's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

string s;
int t;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  // freopen("input.txt","r",stdin);
  // freopen("output.txt","w",stdout);
  ll n;
  cin >> n;

  ll cnt = 0;

  for (ll i = 1; i <= n; i++) {
    for (ll j = i; i * j <= n; j++) {
      ll c = n - (i * j);
      if (c > 0) {
        if (i == j)
          cnt++;
        else
          cnt += 2;
      }
    }
  }
  cout << cnt << endl;
}


#include <bits/stdc++.h>
// Begin Header {{{
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
using Graph = vector<vector<ll>>;
#define rep(i, n) for (ll i = 0; i < n; i++)
#define loop(i, j, n) for (ll i = j; i < n; i++)
#define all(x) (x).begin(), (x).end()
#define UNIQUE(v) v.erase(unique(all(v)), v.end());
#define Sp(p) cout << setprecision(25) << fixed << p << endl;
constexpr int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const long double PI = acos(-1);
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
// }}} End Header

ll f(ll x) {
  ll ret = 0, another = 0;
  for (ll i = 1; i * i <= x; i++) {
    if (i * i == x)
      another++;
    else if (x % i == 0)
      ret++;
  }
  return 2 * ret + another;
}

int main() {
  ll n, ans = 0;
  cin >> n;
  for (ll c = 1; c <= n - c; c++) {
    if (c != n - c)
      ans += (f(n - c) + f(c));
    else
      ans += f(c);
  }

  cout << ans << endl;

  return 0;
}

#include <bits/stdc++.h>
// Begin Header {{{
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
using Graph = vector<vector<ll>>;
#define rep(i, n) for (ll i = 0; i < n; i++)
#define loop(i, j, n) for (ll i = j; i < n; i++)
#define all(x) (x).begin(), (x).end()
#define UNIQUE(v) v.erase(unique(all(v)), v.end());
#define Sp(p) cout << setprecision(25) << fixed << p << endl;
constexpr int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const long double PI = acos(-1);
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
// }}} End Header

int main() {
  ll n, ans = 0;
  cin >> n;
  for (ll i = 1; i <= n; i++) {
    for (ll j = i; i * j < n; j++) {
      if (n - i * j > 0) {
        if (i != j)
          ans += 2;
        else
          ans++;
      }
    }
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
#include <cmath>
#include <string>
#define pb push_back
#define x first
#define y second
#define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define all(x) x.begin(), x.end()
#define int long long
using namespace std;

void __print(int x) { cerr << x; }
void __print(long x) { cerr << x; }
// void __print(long long x) {cerr << x;}
void __print(unsigned x) { cerr << x; }
void __print(unsigned long x) { cerr << x; }
void __print(unsigned long long x) { cerr << x; }
void __print(float x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(long double x) { cerr << x; }
void __print(char x) { cerr << '\\'' << x << '\\''; }
void __print(const char *x) { cerr << '\\"' << x << '\\"'; }
void __print(const string &x) { cerr << '\\"' << x << '\\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }

template <typename T, typename V> void __print(const pair<T, V> &x) {
  cerr << '{';
  __print(x.first);
  cerr << ',';
  __print(x.second);
  cerr << '}';
}
template <typename T> void __print(const T &x) {
  int f = 0;
  cerr << '{';
  for (auto &i : x)
    cerr << (f++ ? "," : ""), __print(i);
  cerr << "}";
}
void _print() { cerr << "]\\n"; }
template <typename T, typename... V> void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v))
    cerr << ", ";
  _print(v...);
}
#ifndef ONLINE_JUDGE
#define debug(x...)                                                            \\
  cerr << "[" << #x << "] = [";                                                \\
  _print(x)
#else
#define debug(x...)
#endif

// look for  all edge cases
// search for a pattern

const int nax = 1e6 + 2;
int prime[nax];

void sieve() {

  for (int i = 1; i < nax; i++) {
    prime[i] = i;
  }

  for (int i = 2; i < nax; i++) {
    if (prime[i] == i) {
      for (int j = 2 * i; j < nax; j += i) {
        prime[j] = min(i, prime[j]);
      }
    }
  }
}

signed main() {
  ios::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);

  sieve();

  int n;
  cin >> n;

  int ans = 0;
  for (int i = n - 1; i >= 1; i--) {
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        ans += 2;
      }
      if (j * j == i) {
        ans -= 1;
      }
    }
  }
  // ans += 1;
  cout << ans;

  return 0;
}

#include <bits/stdc++.h>
#include <cmath>
#include <string>
#define pb push_back
#define x first
#define y second
#define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define all(x) x.begin(), x.end()
#define int long long
using namespace std;

void __print(int x) { cerr << x; }
void __print(long x) { cerr << x; }
// void __print(long long x) {cerr << x;}
void __print(unsigned x) { cerr << x; }
void __print(unsigned long x) { cerr << x; }
void __print(unsigned long long x) { cerr << x; }
void __print(float x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(long double x) { cerr << x; }
void __print(char x) { cerr << '\\'' << x << '\\''; }
void __print(const char *x) { cerr << '\\"' << x << '\\"'; }
void __print(const string &x) { cerr << '\\"' << x << '\\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }

template <typename T, typename V> void __print(const pair<T, V> &x) {
  cerr << '{';
  __print(x.first);
  cerr << ',';
  __print(x.second);
  cerr << '}';
}
template <typename T> void __print(const T &x) {
  int f = 0;
  cerr << '{';
  for (auto &i : x)
    cerr << (f++ ? "," : ""), __print(i);
  cerr << "}";
}
void _print() { cerr << "]\\n"; }
template <typename T, typename... V> void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v))
    cerr << ", ";
  _print(v...);
}
#ifndef ONLINE_JUDGE
#define debug(x...)                                                            \\
  cerr << "[" << #x << "] = [";                                                \\
  _print(x)
#else
#define debug(x...)
#endif

// look for  all edge cases
// search for a pattern

const int nax = 1e6 + 2;
int prime[nax];

void sieve() {

  for (int i = 1; i < nax; i++) {
    prime[i] = i;
  }

  for (int i = 2; i < nax; i++) {
    if (prime[i] == i) {
      for (int j = 2 * i; j < nax; j += i) {
        prime[j] = i;
      }
    }
  }
}

signed main() {
  ios::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);

  sieve();

  int n;
  cin >> n;

  int ans = 0;
  for (int i = n - 1; i > 1; i--) {
    // int cnt = 0;
    int val = 1;
    // unordered_set<int> s;
    int p = i;
    while (p != 1) {
      int cnt = 0;
      int ben = prime[p];
      while (p != 1 && p % ben == 0) {
        p = p / ben;
        cnt += 1;
      }
      val = val * (cnt + 1);
    }

    ans = ans + val;
    // debug(cnt , i , ans);
  }
  ans += 1;
  cout << ans;

  return 0;
}


#include <algorithm>
#include <assert.h>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <utility>
#include <vector>

#define int long long int
using namespace std;
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
int mod(int x) { return (((x) % 1000000007) + 1000000007) % 1000000007; }
int check(int a) {
  int count = 0;
  for (int i = 1; i <= sqrt(a); i++) {
    if (a % i == 0) {
      count++;
    }
  }
  int l = sqrt(a);

  if (l * l == a)
    count = count * 2 - 1;
  else
    count = count * 2;
  return count;
}
int solve() {
  int n;
  cin >> n;
  int sum = 0;
  for (int i = 1; i <= n - 1; i++) {
    sum += check(i);
  }
  cout << sum;
  return 0;
}

signed main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  // cin >> t;
  t = 1;
  while (t--) {
    solve();
  }
  return 0;
}

// C++ program to count number of factors
// of an array of integers
#include <bits/stdc++.h>
using namespace std;

const int MAX = 1000001;

// array to store prime factors
int factor[MAX] = {0};

// function to generate all prime factors
// of numbers from 1 to 10^6
void generatePrimeFactors() {
  factor[1] = 1;

  // Initializes all the positions with their value.
  for (int i = 2; i < MAX; i++)
    factor[i] = i;

  // Initializes all multiples of 2 with 2
  for (int i = 4; i < MAX; i += 2)
    factor[i] = 2;

  // A modified version of Sieve of Eratosthenes to
  // store the smallest prime factor that divides
  // every number.
  for (int i = 3; i * i < MAX; i++) {
    // check if it has no prime factor.
    if (factor[i] == i) {
      // Initializes of j starting from i*i
      for (int j = i * i; j < MAX; j += i) {
        // if it has no prime factor before, then
        // stores the smallest prime divisor
        if (factor[j] == j)
          factor[j] = i;
      }
    }
  }
}

// function to calculate number of factors
int calculateNoOFactors(int n) {
  if (n == 1)
    return 1;

  int ans = 1;

  // stores the smallest prime number
  // that divides n
  int dup = factor[n];

  // stores the count of number of times
  // a prime number divides n.
  int c = 1;

  // reduces to the next number after prime
  // factorization of n
  int j = n / factor[n];

  // false when prime factorization is done
  while (j != 1) {
    // if the same prime number is dividing n,
    // then we increase the count
    if (factor[j] == dup)
      c += 1;

    /* if its a new prime factor that is factorizing n,
    then we again set c=1 and change dup to the new
    prime factor, and apply the formula explained
    above. */
    else {
      dup = factor[j];
      ans = ans * (c + 1);
      c = 1;
    }

    // prime factorizes a number
    j = j / factor[j];
  }

  // for the last prime factor
  ans = ans * (c + 1);

  return ans;
}

// Driver program to test above function
int main() {
  // generate prime factors of number
  // upto 10^6
  generatePrimeFactors();
  int n;
  cin >> n;
  int sum = 0;
  for (int i = 1; i <= n - 1; i++)
    sum += calculateNoOFactors(i);
  cout << sum;

  return 0;
}


#include <bits/stdc++.h>
#include <climits>
#include <vector>
using namespace std;

int main() {
  long int n;
  cin >> n;
  int count = 0;
  long int arr[n];
  for (int i = 1; i < n; i++) {
    arr[i] = i;
  }

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = 1; k <= n; k++) {
        if ((arr[i] * arr[j]) + arr[k] == n) {
          count++;
        }
      }
    }
  }
  cout << count << endl;
}

#include <bits/stdc++.h>

using namespace std;

int main() {
  int N;
  cin >> N;
  int count = 0;
  for (int i = N - 1; i > 0; i--) {
    for (int a = 1; a <= sqrt(i); a++) {
      if (a * a == i) {
        count++;
        break;
      }
      if (i % a == 0)
        count += 2;
    }
  }
  cout << count;
  return 0;
}


#include <bits/stdc++.h>
#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define ll long long
#define all(x) (x).begin(), (x).end()
#define print(x)                                                               \\
  if (x)                                                                       \\
    cout << "YES\\n";                                                           \\
  else                                                                         \\
    cout << "NO\\n";
#define f(i, x, y) for (ll i = x; i <= y; i++)
#define rf(i, x, y) for (ll i = x; i >= y; i--)
#define pb push_back
#define F first
#define S second
using namespace std;
ll res[1000000 + 1];
ll scieve(ll n) {
  ll x = 2;
  for (ll i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i != i)
        x += 2;
      else
        x += 1;
    }
  }
  return x;
}
int main() {
  // #ifndef HP
  //   freopen("in.txt", "r", stdin);
  //   freopen("out.txt", "w", stdout);
  // #endif

  fastio;
  int t = 1;
  // cin >> t;
  while (t--) {
    ll n;
    cin >> n;
    res[0] = 0;
    res[1] = 0;
    res[2] = 1;
    for (ll i = 3; i <= n; i++) {
      res[i] = res[i - 1] + scieve((ll)(i - 1));
    }
    cout << res[n];
  }
}

#include <bits/stdc++.h>
#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define ll long long
#define all(x) (x).begin(), (x).end()
#define print(x)                                                               \\
  if (x)                                                                       \\
    cout << "YES\\n";                                                           \\
  else                                                                         \\
    cout << "NO\\n";
#define f(i, x, y) for (ll i = x; i <= y; i++)
#define rf(i, x, y) for (ll i = x; i >= y; i--)
#define pb push_back
#define F first
#define S second
using namespace std;
ll res[1000000 + 1];
ll dp[1000000 + 1];
void scieve(ll n = 1000000) {
  for (ll i = 2; i <= n; i++) {
    if (dp[i] == 0) {
      for (ll j = i * 2; j <= n; j += i) {
        if (i != j / i)
          dp[j] += (1 + dp[j / i]);
        else
          dp[j]++;
      }
    }
  }
}
int main() {
  // #ifndef HP
  //   freopen("in.txt", "r", stdin);
  //   freopen("out.txt", "w", stdout);
  // #endif

  fastio;
  int t = 1;
  scieve();
  // cin >> t;
  while (t--) {
    ll n;
    cin >> n;
    res[0] = 0;
    res[1] = 0;
    res[2] = 1;
    for (ll i = 3; i <= n; i++) {
      res[i] = res[i - 1] + dp[i - 1] + 2;
    }
    cout << res[n];
  }
}


#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
int dx[] = {-1, 0, 0, 1, -1, -1, 1, 1, 0};
int dy[] = {0, 1, -1, 0, 1, -1, 1, -1, 0};
/*
int main()
{
        int r, c;
        cin >> r >> c;
        int sy, sx, gy, gx;
        vector<vector<char>>field(r,vector<char>(c));
        sy--, sx--, gy--, gx--;
        for (int i = 0; i < r; i++)
        {
                for (int j = 0; j < c; j++)
                {
                        cin >> field[i][j];
                }
        }
        queue<pair<int,int>>q;
        q.push({ sx,sy });
        vector<vector<int>>d(c, vector<int> (r, -1));
        d[sx][sy] = 0;

        while (!q.empty())
        {
                pair<int, int>p = q.front;
                q.pop();
                for (int i = 0; i < 4; i++)
                {
                        int nx = p.first + dx[i], ny = p.second + dy[i];
                        if (nx < 0 || ny < 0 || nx >= c || ny >= r || d[nx][ny]
!= -1 || field[nx][ny] == '#')continue; q.push({ nx,ny }); d[nx][ny] =
d[p.first][p.second] + 1;
                }
        }

        cout << d[gx][gy] << endl;
}*/

int main() {
  int n;
  cin >> n;
  int ans = 0;
  int x;
  for (int i = 1; i < n; i++) {

    for (int j = 1; j < n; j++) {
      if (i * j > n) {
        continue;
      }

      if (n - (i * j) > 0) {
        ans += 1;
      }
    }
  }
  cout << ans << endl;
}

#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
int dx[] = {-1, 0, 0, 1, -1, -1, 1, 1, 0};
int dy[] = {0, 1, -1, 0, 1, -1, 1, -1, 0};
/*
int main()
{
        int r, c;
        cin >> r >> c;
        int sy, sx, gy, gx;
        vector<vector<char>>field(r,vector<char>(c));
        sy--, sx--, gy--, gx--;
        for (int i = 0; i < r; i++)
        {
                for (int j = 0; j < c; j++)
                {
                        cin >> field[i][j];
                }
        }
        queue<pair<int,int>>q;
        q.push({ sx,sy });
        vector<vector<int>>d(c, vector<int> (r, -1));
        d[sx][sy] = 0;

        while (!q.empty())
        {
                pair<int, int>p = q.front;
                q.pop();
                for (int i = 0; i < 4; i++)
                {
                        int nx = p.first + dx[i], ny = p.second + dy[i];
                        if (nx < 0 || ny < 0 || nx >= c || ny >= r || d[nx][ny]
!= -1 || field[nx][ny] == '#')continue; q.push({ nx,ny }); d[nx][ny] =
d[p.first][p.second] + 1;
                }
        }

        cout << d[gx][gy] << endl;
}*/

int main() {
  int n;
  cin >> n;
  int ans = 0;
  int x;
  for (int i = 1; i < n; i++) {

    for (int j = 1; j < n; j++) {
      if (i * j > n) {
        break;
      }

      if (n - (i * j) > 0) {
        ans += 1;
      }
    }
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;

#define ll long long int
#define pb push_back
#define f(i, x, y) for (i = x; i < y; i++)
#define vll vector<ll>
#define fast                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define yes cout << "YES" << endl
#define no cout << "NO" << endl

ll fac(ll n) {
  ll i, ans = 0;
  for (i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      ll f1 = i;
      ll f2 = n / i;
      if (f1 == f2)
        ans++;
      else
        ans += 2;
    }
  }
  return ans;
}

void solve() {
  ll n;
  cin >> n;

  ll i = 1;
  ll ans = 0;
  for (i = 1; i < n; i++) {
    ans += fac(n - i);
  }
  cout << ans << endl;
}

int main() {
  fast;
  ll t = 1;
  // cin>>t;
  while (t--)
    solve();
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

#define ll long long int
#define pb push_back
#define f(i, x, y) for (i = x; i < y; i++)
#define vll vector<ll>
#define fast                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define yes cout << "YES" << endl
#define no cout << "NO" << endl

void solve() {
  ll n;
  cin >> n;

  ll i = 1;
  ll ans = 0;
  for (i = 1; i < n; i++) {
    if (n % i == 0)
      ans += (n / i - 1);
    else
      ans += n / i;
  }
  cout << ans << endl;
}

int main() {
  fast;
  ll t = 1;
  // cin>>t;
  while (t--)
    solve();
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(), (x).end()

const int MOD = 1000000007;

int prime(int n) {
  vector<int> x(n + 1);
  int num = n;
  int res = 1;

  for (int i = 2; i <= n; i++) {
    while (num % i == 0) {
      x.at(i)++;
      num /= i;
    }
  }
  sort(all(x), greater<int>());
  for (int i = 0; x.at(i) > 0; i++) {
    res *= x.at(i) + 1;
  }
  return res;
}

int main() {
  int n;
  cin >> n;

  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += prime(n - i);
  }

  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(), (x).end()

const int MOD = 1000000007;

int main() {
  int n;
  cin >> n;

  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += (n - 1) / i;
  }

  cout << ans << endl;
}


#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>

using namespace std;
const long long P = 1000000007;

long long solve(long long n) {
  int res = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0)
      res += 2;
    if (n % i == 0 && i == sqrt(n))
      res--;
  }
  return res;
}

int main() {
  long long n;
  cin >> n;
  long long count = 0;
  for (int i = 1; i < n; i++) {
    count += solve(i);
  }
  cout << count << endl;
  return 0;
}

#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>

using namespace std;
const long long P = 1000000007;

long long solve(long long n) {
  int res = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0)
      res += 2;
    if (n % i == 0 && i == sqrt(n))
      res--;
  }
  return res;
}

int main() {
  long long n;
  cin >> n;
  long long count = 0;
  for (int i = 1; i < n; i++) {
    count += (n - 1) / i;
  }
  cout << count << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i++)
using ll = long long;
vector<long long> enum_divisors(long long N) {
  vector<long long> res;
  for (long long i = 1; i * i <= N; ++i) {
    if (N % i == 0) {
      res.push_back(i);
      // 重複しないならば i の相方である N/i も push
      if (N / i != i)
        res.push_back(N / i);
    }
  }
  return res;
}

int main() {
  int n, ans = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    long long N = n - i;
    const auto &res = enum_divisors(N);
    ans += res.size();
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i++)
using ll = long long;
int enumd(int N) {
  int res = 0;
  for (int i = 1; i * i <= N; ++i) {
    if (N % i == 0) {
      res++;
      // 重複しないならば i の相方である N/i も push
      if (N / i != i)
        res++;
    }
  }
  return res;
}

int main() {
  int n, ans = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    long long N = n - i;
    const auto &res = enumd(N);
    ans += res;
  }
  cout << ans << endl;
}


#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cctype>
#include <cmath>
#include <complex>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (ll i = ll(a); i < ll(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define rrep(i, a) for (ll i = ll(a - 1); i >= 0; --i)
#define all(x) (x).begin(), (x).end()
#define PRINT(V) cout << V << "\\n"
#define SORT(V) sort((V).begin(), (V).end())
#define RSORT(V) sort((V).rbegin(), (V).rend())
using namespace std;
using ll = long long;
using ull = unsigned long long;
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
inline void Yes(bool condition) {
  if (condition)
    PRINT("Yes");
  else
    PRINT("No");
}
template <class itr> void cins(itr first, itr last) {
  for (auto i = first; i != last; i++) {
    cin >> (*i);
  }
}
template <class itr> void array_output(itr start, itr goal) {
  string ans = "", k = " ";
  for (auto i = start; i != goal; i++)
    ans += to_string(*i) + k;
  if (!ans.empty())
    ans.pop_back();
  PRINT(ans);
}
ll gcd(ll a, ll b) { return a ? gcd(b % a, a) : b; }

const ll INF = 1e18;
const ll MOD = 1000000007;
const ll MOD2 = 998244353;
const ll MOD3 = 1e6;
const ll EPS = 1e-10;
int sgn(const double a) { return (a < -EPS ? -1 : (a > EPS ? +1 : 0)); }
typedef pair<ll, ll> P;
typedef tuple<ll, ll, ll> tri;
typedef pair<long double, long double> point;
typedef complex<long double> Point;
const ll MAX = 3000;
constexpr ll nx[4] = {-1, 0, 1, 0};
constexpr ll ny[4] = {0, 1, 0, -1};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll n;
  cin >> n;
  ll ans = 0;
  rep(c, 1, n) {
    ll m = n - c, s = sqrt(m);
    rep(i, 1, s + 1) {
      if (m % i == 0) {
        ans += 2;
      }
    }
    if (m == s * s)
      ans--;
  }
  PRINT(ans);
}

#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cctype>
#include <cmath>
#include <complex>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (ll i = ll(a); i < ll(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define rrep(i, a) for (ll i = ll(a - 1); i >= 0; --i)
#define all(x) (x).begin(), (x).end()
#define PRINT(V) cout << V << "\\n"
#define SORT(V) sort((V).begin(), (V).end())
#define RSORT(V) sort((V).rbegin(), (V).rend())
using namespace std;
using ll = long long;
using ull = unsigned long long;
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
inline void Yes(bool condition) {
  if (condition)
    PRINT("Yes");
  else
    PRINT("No");
}
template <class itr> void cins(itr first, itr last) {
  for (auto i = first; i != last; i++) {
    cin >> (*i);
  }
}
template <class itr> void array_output(itr start, itr goal) {
  string ans = "", k = " ";
  for (auto i = start; i != goal; i++)
    ans += to_string(*i) + k;
  if (!ans.empty())
    ans.pop_back();
  PRINT(ans);
}
ll gcd(ll a, ll b) { return a ? gcd(b % a, a) : b; }

const ll INF = 1e18;
const ll MOD = 1000000007;
const ll MOD2 = 998244353;
const ll MOD3 = 1e6;
const ll EPS = 1e-10;
int sgn(const double a) { return (a < -EPS ? -1 : (a > EPS ? +1 : 0)); }
typedef pair<ll, ll> P;
typedef tuple<ll, ll, ll> tri;
typedef pair<long double, long double> point;
typedef complex<long double> Point;
const ll MAX = 3000;
constexpr ll nx[4] = {-1, 0, 1, 0};
constexpr ll ny[4] = {0, 1, 0, -1};
int a[1000005];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll n;
  cin >> n;
  rep(i, 1, n + 1) {
    for (ll j = i; j < n + 1; j += i) {
      a[j]++;
    }
  }
  ll ans = 0;
  rep(c, 1, n) { ans += a[n - c]; }
  PRINT(ans);
}


//                        Bismillahir Rahmanir Rahim
// ALGO:
#include <bits/stdc++.h>
#define pb push_back
#define F first
#define S second
#define all(v) v.begin(), v.end()
#define FILL(a, x) memset(a, x, sizeof(a))
#define ll long long
#define Fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define INF INT_MAX
#define MX 1000010
#define mod 1000000007
#define dout                                                                   \\
  if (debug)                                                                   \\
  cout
#define FR(i, n) for (int i = 0; i < n; i++)
#define FOR(i, n) for (int i = 1; i <= n; i++)
const double Pi = acos(-1);
using namespace std;
int debug = 01;
void solve() {
  int n, c = 1;
  cin >> n;
  for (int i = 2; i < n; i++) {
    for (int j = 1; j <= sqrt(i); j++)
      if (!(i % j)) {
        if (i / j == j)
          c++;
        else
          c += 2;
      }
  }
  cout << c;
}
int main() {
  Fast int tst = 1;
  // cin>>tst;
  for (int T = 1; T <= tst; T++) {
    // cout<<"Case "<<T<<": ";
    solve();
  }
}

//                        Bismillahir Rahmanir Rahim
// ALGO:
#include <bits/stdc++.h>
#define pb push_back
#define F first
#define S second
#define all(v) v.begin(), v.end()
#define FILL(a, x) memset(a, x, sizeof(a))
#define ll long long
#define Fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define INF INT_MAX
#define MX 1000010
#define mod 1000000007
#define dout                                                                   \\
  if (debug)                                                                   \\
  cout
#define FR(i, n) for (int i = 0; i < n; i++)
#define FOR(i, n) for (int i = 1; i <= n; i++)
const double Pi = acos(-1);
using namespace std;
int debug = 01;
bitset<10000001> pr;
int pl[664580], s;
void sieve(int mx) {
  for (int p = 4; p <= mx; p += 2)
    pr[p] = 1;
  for (int p = 3; p * p <= mx; p += 2)
    if (!pr[p])
      if (p <= sqrt(mx))
        for (int i = p * p; i <= mx; i += p)
          pr[i] = 1;
  for (int i = 2; i <= mx; i++)
    if (!pr[i])
      pl[s++] = i;
}
void solve() {
  sieve(1000000);
  int n, c = 1;
  cin >> n;
  for (int i = 2; i < n; i++) {
    int x = i, y = 1;
    for (int j = 0; pl[j] * pl[j] <= x; j++) {
      int t = 1;
      while (!(x % pl[j])) {
        x /= pl[j];
        t++;
      }
      y *= t;
    }
    if (x != 1)
      y *= 2;
    c += y;
  }
  cout << c;
}
int main() {
  Fast int tst = 1;
  // cin>>tst;
  for (int T = 1; T <= tst; T++) {
    // cout<<"Case "<<T<<": ";
    solve();
  }
}


#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define int long long
#define double long double
#define x first
#define y second
#define yy cout << "YES\\n"
#define nn cout << "NO\\n"
#define rt return
#define ct continue
#define br break
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define mmod 1000000007
#define pmod 998244353
using namespace std;
int gcd(int a, int b) {
  while (b)
    b ^= a ^= b ^= a %= b;
  return a;
}
int lcm(int a, int b) { return a * b / gcd(a, b); }
int bigmod(int b, int p, int m) {
  int ans = 1;
  b %= m;
  if (!b)
    return 0;
  while (p) {
    if (p & 1)
      ans = (ans * b) % m;
    p >>= 1;
    b = (b * b) % m;
  }
  return ans;
}
int f[100001];
void recur() {
  f[1] = 1;
  for (int i = 1; i < 100001; i++)
    f[i] = i;
  for (int i = 4; i < 100001; i += 2)
    f[i] = 2;
  for (int i = 3; i * i < 100001; i++) {
    if (f[i] == i) {
      for (int j = i * i; j < 100001; j += i) {
        if (f[j] == j)
          f[j] = i;
      }
    }
  }
}
int fac(int n) {
  if (n == 1)
    return 1;
  int ans = 1;
  int d = f[n], c = 1, j = n / f[n];
  while (j != 1) {
    if (f[j] == d)
      c++;
    else {
      d = f[j];
      ans *= (c + 1);
      c = 1;
    }
    j /= f[j];
  }
  return ans * (c + 1);
}
void solve() {
  recur();
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += fac(n - i);
  }
  cout << ans;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  // cin>>t;
  while (t--)
    solve();
}

#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define int long long
#define double long double
#define x first
#define y second
#define yy cout << "YES\\n"
#define nn cout << "NO\\n"
#define rt return
#define ct continue
#define br break
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define mmod 1000000007
#define pmod 998244353
using namespace std;
int gcd(int a, int b) {
  while (b)
    b ^= a ^= b ^= a %= b;
  return a;
}
int lcm(int a, int b) { return a * b / gcd(a, b); }
int bigmod(int b, int p, int m) {
  int ans = 1;
  b %= m;
  if (!b)
    return 0;
  while (p) {
    if (p & 1)
      ans = (ans * b) % m;
    p >>= 1;
    b = (b * b) % m;
  }
  return ans;
}
int f[1000001];
void recur() {
  f[1] = 1;
  for (int i = 1; i < 1000001; i++)
    f[i] = i;
  for (int i = 4; i < 1000001; i += 2)
    f[i] = 2;
  for (int i = 3; i * i < 1000001; i++) {
    if (f[i] == i) {
      for (int j = i * i; j < 1000001; j += i) {
        if (f[j] == j)
          f[j] = i;
      }
    }
  }
}
int fac(int n) {
  if (n == 1)
    return 1;
  int ans = 1;
  int d = f[n], c = 1, j = n / f[n];
  while (j != 1) {
    if (f[j] == d)
      c++;
    else {
      d = f[j];
      ans *= (c + 1);
      c = 1;
    }
    j /= f[j];
  }
  return ans * (c + 1);
}
void solve() {
  recur();
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += fac(n - i);
  }
  cout << ans;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  // cin>>t;
  while (t--)
    solve();
}


#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define sz(x) int(x.size())
using namespace std;
typedef long long ll;
const int inf = 1001001001;

int main() {
  ll n;
  cin >> n;

  ll ans = 0;

  for (ll c = 1; c < n; c++) {
    for (ll a = 1; a <= sqrt(n - c); a++) {
      if ((n - c) % a == 0)
        ans += 2;
      if (a * a == n - c)
        ans--;
    }
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define sz(x) int(x.size())
using namespace std;
typedef long long ll;
const int inf = 1001001001;

int main() {
  ll n;
  cin >> n;

  ll ans = 0;
  for (ll a = 1; a < n; a++) {
    ans += (n - 1) / a;
  }

  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, C;
  C = 0;
  cin >> N;
  for (int i = 1; i < N; i++) {
    for (int j = 1; j < N; j++) {
      if (i * j < N) {
        C++;
      }
    }
  }
  cout << C << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, C;
  C = 0;
  cin >> N;
  for (int i = 1; i < N; i++) {
    int D;
    D = 0;
    if (N % i == 0) {
      D = N / i;
    } else {
      D = N / i + 1;
    }
    for (int j = 1; j < D; j++) {
      if (i * j < N) {
        C++;
      }
    }
  }
  cout << C << endl;
}


#include <bits/stdc++.h>
using namespace std;
using ll = long long;

vector<int> primes(int N) {
  vector<bool> is_prime(N + 1);
  for (int i = 0; i <= N; i++) {
    is_prime[i] = true;
  }
  vector<int> P;
  for (int i = 2; i <= N; i++) {
    if (is_prime[i]) {
      for (int j = 2 * i; j <= N; j += i) {
        is_prime[j] = false;
      }
      P.emplace_back(i);
    }
  }
  return P;
}

ll solve(vector<int> P, int i, int n, int N) {
  if (i == P.size()) {
    return 1;
  }
  int num = N / P[i]; // 素数　P[i] が含まれる数の上限
  ll ans = 0;

  int p = 1;
  for (int j = 0; j <= num; j++) {
    if (N < p * n)
      break;
    ll tmp = (j + 1) * solve(P, i + 1, p * n, N);
    // printf("%ld\\n", tmp);
    ans += tmp;
    p *= P[i];
  }
  return ans;
}

int main() {
  int N;
  cin >> N;
  if (N == 1) {
    cout << 0 << endl;
    return 0;
  }
  vector<int> P = primes(N - 1);
  ll ans = solve(P, 0, 1, N - 1);

  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
  int N;
  cin >> N;

  ll ans = 0;
  // vector<int> X(N, 0);
  for (int i = 1; i < N; i++) {
    // X[i * i]++;
    if (i * i >= N)
      break;
    ans++;

    for (int j = i + 1; j < N; j++) {
      if (i * j >= N)
        break;
      // X[i * j] += 2;
      ans += 2;
    }
  }
  cout << ans << endl;
  return 0;
}