"use strict";
    
// 約数の個数列挙
const calcDivisor = N => {
  let result = [];

  for(let i=1; i*i<=N; i++) {
    if(N % i === 0) {
      result.push(i);
      const j = N / i;
      if(j !== i) result.push(j);
    }
  }

  return result.sort((a,b)=>a-b).length;
}

// 素因数の配列を返す(要素？側)
function primeFactorization(n) {
    var result = [];

    if (n === 1) {
        return [1];
    }

    var init = 2;

    while ( n !== 1 ) {
        var i = init;
        while (i < Number.MAX_SAFE_INTEGER) {
            if (n % i == 0) {
                result.push(i)
                n /= i;
                break;
            }
            i++;
        }
        init = i;
    }
    
    let N = result.length;
    let temp = [];
    
    for(let i=0; i<N; i++) {
        if(result[i] === temp[temp.length-1]) {
            temp[temp.length-1] = temp[temp.length-1] * result[i];
        } else {
            temp.push(result[i]);
        }
    }

    return temp;
}


const main = arg => {
    arg = arg.trim().split("\n");
    const N = parseInt(arg[0].split(" ")[0]);
    
    let map = {};
    let answer = 0;
    
    // console.log(primeFactorization(20))
    
    for(let i=1; i<=N; i++) {
        let primes = primeFactorization(i);
        let M = primes.length;
        
        // console.log("primes:" + primes);
        let divisors = 1;
        
        for(let j=0; j<M; j++) {
            if(map[primes[j]]) {
                divisors *= map[primes[j]];
            }
        }
        
        if(divisors === 1) {
            divisors = calcDivisor(i);
        }

        answer += (i * divisors);
        // console.log(i + "の約数の個数は" + divisors);
    }

    console.log(answer);
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));