// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;



#define rep(i, m, n) for(int(i) = (int)(m); i < (int)(n); ++i)

#define rep2(i, m, n) for(int(i) = (int)(n)-1; i >= (int)(m); --i)

#define REP(i, n) rep(i, 0, n)

#define REP2(i, n) rep2(i, 0, n)

#define all(hoge) (hoge).begin(), (hoge).end()

#define en '\n'

using ll = long long;

using ull = unsigned long long;

template <class T>

using vec = vector<T>;

template <class T>

using vvec = vector<vec<T>>;

typedef pair<ll, ll> P;

constexpr long long INF = 1LL << 60;

constexpr int INF_INT = 1 << 25;

constexpr long long MOD = (ll)1e9 + 7;

//constexpr long long MOD = 998244353LL;

using ld = long double;

static const ld pi = 3.141592653589793L;

typedef vector<ll> Array;

typedef vector<Array> Matrix;



template <class T>

inline bool chmin(T &a, T b) {

    if(a > b) {

        a = b;

        return true;

    }

    return false;

}

template <class T>

inline bool chmax(T &a, T b) {

    if(a < b) {

        a = b;

        return true;

    }

    return false;

}



struct Edge {

    ll to, rev;

    long double cap;

    Edge(ll _to, long double _cap, ll _rev) {

        to = _to;

        cap = _cap;

        rev = _rev;

    }

};

using Edges = vector<Edge>;

using Graph = vector<Edges>;



void add_edge(Graph &G, ll from, ll to, long double cap, bool revFlag,

              long double revCap) {

    G[from].push_back(Edge(to, cap, (ll)G[to].size()));

    if(revFlag)

        G[to].push_back(Edge(from, revCap, (ll)G[from].size() - 1));

}



void solve() {

    ll n;

    cin >> n;

    vec<ll> f(n + 1, 1);

    ll ans = 1;

    for(ll i = 2; i <= n; i++) {

        for(ll j = 1; j * i <= n; j++) {

            f[j * i]++;

        }

        ans += i * f[i];

    }

    cout << ans << en;

}



int main() {

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    solve();

    // ll t;cin>>t;REP(i,t) solve();



    return 0;

}


// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;



#define rep(i, m, n) for(int(i) = (int)(m); i < (int)(n); ++i)

#define rep2(i, m, n) for(int(i) = (int)(n)-1; i >= (int)(m); --i)

#define REP(i, n) rep(i, 0, n)

#define REP2(i, n) rep2(i, 0, n)

#define all(hoge) (hoge).begin(), (hoge).end()

#define en '\n'

using ll = long long;

using ull = unsigned long long;

template <class T>

using vec = vector<T>;

template <class T>

using vvec = vector<vec<T>>;

typedef pair<ll, ll> P;

constexpr long long INF = 1LL << 60;

constexpr int INF_INT = 1 << 25;

constexpr long long MOD = (ll)1e9 + 7;

//constexpr long long MOD = 998244353LL;

using ld = long double;

static const ld pi = 3.141592653589793L;

typedef vector<ll> Array;

typedef vector<Array> Matrix;



template <class T>

inline bool chmin(T &a, T b) {

    if(a > b) {

        a = b;

        return true;

    }

    return false;

}

template <class T>

inline bool chmax(T &a, T b) {

    if(a < b) {

        a = b;

        return true;

    }

    return false;

}



struct Edge {

    ll to, rev;

    long double cap;

    Edge(ll _to, long double _cap, ll _rev) {

        to = _to;

        cap = _cap;

        rev = _rev;

    }

};

using Edges = vector<Edge>;

using Graph = vector<Edges>;



void add_edge(Graph &G, ll from, ll to, long double cap, bool revFlag,

              long double revCap) {

    G[from].push_back(Edge(to, cap, (ll)G[to].size()));

    if(revFlag)

        G[to].push_back(Edge(from, revCap, (ll)G[from].size() - 1));

}



void solve() {

    ll n;

    cin >> n;

    ll ans = 0;

    rep(i, 1, n + 1) {

        ll con = n / (ll)i;

        ans += con * (con + 1) / 2 * i;

    }

    cout << ans << en;

}



int main() {

    ios::sync_with_stdio(false);

    cin.tie(0);

    cout.tie(0);



    solve();

    // ll t;cin>>t;REP(i,t) solve();



    return 0;

}


// Fastest known solution for this problem: