You are given a positive integer n greater or equal to 2. For every pair of integers a and b (2 ≤ |a|, |b| ≤ n), you can transform a into b if and only if there exists an integer x such that 1 < |x| and (a ⋅ x = b or b ⋅ x = a), where |x| denotes the absolute value of x.

After such a transformation, your score increases by |x| points and you are not allowed to transform a into b nor b into a anymore.

Initially, you have a score of 0. You can start at any integer and transform it as many times as you like. What is the maximum score you can achieve?

Input

A single line contains a single integer n (2 ≤ n ≤ 100 000) — the given integer described above.

Output

Print an only integer — the maximum score that can be achieved with the transformations. If it is not possible to perform even a single transformation for all possible starting integers, print 0.

Examples

Input

4


Output

8

Input

6


Output

28

Input

2


Output

0

Note

In the first example, the transformations are 2 → 4 → (-2) → (-4) → 2.

In the third example, it is impossible to perform even a single transformation.
#include <bits/stdc++.h>
using namespace std;
const int N = 611322;
const int M = 230;
const long long MOD = 1000000007LL;
const double pi = acos(-1.0);
inline int lowbit(int x) { return x & (-x); }
void print(long long x) {
  if (x > 9) print(x / 10);
  printf("%c", '0' + x % 10);
}
long long pow(long long a, long long b) {
  long long r = 1;
  while (b) {
    if (b & 1) r = r * a % MOD;
    a = a * a % MOD, b >>= 1;
  }
  return r;
}
long long PowMod(long long a, long long b, long long P) {
  long long r = 1;
  while (b) {
    if (b & 1) r = r * a % P;
    a = a * a % P, b >>= 1;
  }
  return r;
}
void gcd(long long a, long long b, long long &d, long long &x, long long &y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
inline long long inv(long long a, long long n) {
  long long d, x, y;
  gcd(a, n, d, x, y);
  return d == 1 ? (x + n) % n : -1;
}
int gcd(int x, int y) {
  if (!y) return x;
  return gcd(y, x % y);
}
struct node {
  int x, dep;
  long long v;
};
inline bool operator<(const node &x, const node &y) { return x.dep < y.dep; }
int n, m, k;
long long a[N];
char s[N];
int main() {
  int cases = 1;
  a[2] = 0;
  for (int i = 3; i <= 123456; ++i) {
    a[i] = a[i - 1];
    for (int j = 2; j * j <= i; ++j) {
      if (i % j) continue;
      if (j * j == i) {
        a[i] += j * 4;
      } else {
        a[i] += j * 4;
        a[i] += (i / j) * 4;
      }
    }
  }
  for (int iii = 1; iii <= cases; ++iii) {
    int x;
    scanf("%d", &x);
    printf("%I64d\n", a[x]);
  }
}
