#include <bits/stdc++.h>
#define ll long long int
#define P pair
#define F first
#define S second
#define p_b push_back
#define ld long double
#define N 5000005
//#include <wadim>
ll mod = 998244353; //4294967296; 1000000000 + 7; 998244353; 2*3*5*7*11*13*17*19*23 + 1
ll inf = 1000000000000000000;
using namespace std;

mt19937 unlucko(chrono::steady_clock::now().time_since_epoch().count());

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
//using ordered_set_pair = tree<pair<ll, ll>, null_type, less<pair<ll, ll> >, rb_tree_tag, tree_order_statistics_node_update>;
//using ordered_set=tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>;
/*
struct seg {
    vector<ll> T;
    int tsize;
    void init(int n) {
        T.clear();
        tsize = 1;
        while (tsize < n)
            tsize <<= 1;
        T.assign(tsize * 2 - 1, 0);
    }
    void build(vector<int> &a, int x, int lx, int rx){
        if(lx >= a.size())
            return;
        if(rx - lx == 1)
            T[x] = a[lx];
        else{
            build(a, x * 2 + 1, lx, (lx + rx) / 2);
            build(a, x * 2 + 2, (lx + rx) / 2, rx);
            T[x] = T[x * 2 + 1] + T[x * 2 + 2];
        }
    }
    void build(vector<int> &a){
        init(a.size());
        build(a, 0, 0, tsize);
    }
    void update(int num, int val, int x, int l, int r) {
        if (r - l == 1) {
            T[x] = val;
            return;
        }
        int mid = (l + r) >> 1;
        if (num < mid)
            update(num, val, 2 * x + 1, l, mid);
        else
            update(num, val, 2 * (x + 1), mid, r);
        T[x] = T[2 * x + 1] + T[2 * x + 2];
    }
    void update(int num, int val) {
        update(num, val, 0, 0, tsize);
    }
    ll sum(int l, int r, int x, int lx, int rx) {
        if (l >= rx || lx >= r)
            return 0;
        if (lx >= l && rx <= r)
            return T[x];
        int mid = (lx + rx) / 2;
        return sum(l, r, 2 * x + 1, lx, mid) + sum(l, r, 2 * x + 2, mid, rx);
    }
    ll sum(int l, int r) {
        return sum(l, r, 0, 0, tsize);
    }
};
*/

vector<ll> era(int(1e7) + 1);
int main()
{
    iostream::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    /*int n; cin >> n;
    n *= 2;
    seg a;
    vector<int> b(n), ans(n / 2), le(n, -1), c(n);
    a.build(b);
    for(int i=0;i<n;i++)
        cin >> c[i];
    for(int i=0;i<n;i++){
        int x = c[i];
        if(le[x - 1] != -1){
            ans[x - 1] += a.sum(le[x - 1], i);
            a.update(x - 1, 0);
        }else{
            a.update(x - 1, 1);
            le[x - 1] = i;
        }
    }
    reverse(c.begin(), c.end());
    le.assign(n, -1);
    a.build(b);
    for(int i=0;i<n;i++){
        int x = c[i];
        if(le[x - 1] != -1){
            ans[x - 1] += a.sum(le[x - 1], i);
            a.update(x - 1, 0);
        }else{
            a.update(x - 1, 1);
            le[x - 1] = i;
        }
    }
    for(auto it:ans)
        cout << it << " ";*/
    int n; cin >> n;
    for(int i=1;i<=int(1e7);i++){
        for(int j=i;j<=int(1e7);j+=i){
            era[j] ++;
        }
    }
    ll ans = 0;
    for(int i=1;i<=n;i++)
        ans += era[i] * i;
    cout << ans;
}


Measured memory_bytes: 81308