Problem:
Score : 400 points

Problem Statement

For a positive integer X, let f(X) be the number of positive divisors of X.

Given a positive integer N, find \sum_{K=1}^N K\times f(K).

Constraints

1 \leq N \leq 10^7

Input

Input is given from Standard Input in the following format:

N

Output

Print the value \sum_{K=1}^N K\times f(K).

Sample Input 1

4

Sample Output 1

23

We have f(1)=1, f(2)=2, f(3)=2, and f(4)=3, so the answer is 1\times 1 + 2\times 2 + 3\times 2 + 4\times 3 =23.

Sample Input 2

100

Sample Output 2

26879

Sample Input 3

10000000

Sample Output 3

838627288460105

Watch out for overflows.

Solution in Rust (1.42.0) (judge verdict: Time Limit Exceeded)

macro_rules! scan_sub {
    ( $itr:ident, $t:ty ) => {
        let mut buf = String::new();
        let $itr = {
            while buf.trim().len() == 0 {
                buf = String::new();
                std::io::stdin().read_line(&mut buf).unwrap();
            }
            buf.split_whitespace().map(|n| n.parse::<$t>().unwrap())
        };
    };
}

macro_rules! scan {
    ( $x:ident; Vec<$t:ty> ) => {
        scan_sub!(itr, $t);
        let $x = itr.collect::<Vec<_>>();
    };
    ( $( $x:ident ),*; $t:ty ) => {
        scan_sub!(itr, $t);
        let mut itr = itr;
        $(
            let $x = itr.next().unwrap();
        )*
    };
}

fn main() {
    scan!(n; usize);
    if n == 1 {
        println!("1");
        return;
    } else if n == 2 {
        println!("5");
        return;
    } else if n == 3 {
        println!("11");
        return;
    }

    let mut array = vec![0; n+1];
    array[1] = 1;
    array[2] = 2;
    array[3] = 2;

    for i in 4..=n {
        let m = (i as f64).sqrt() as usize;
        for d in 1..=m {
            if i % d == 0 {
                array[i] += 2;
            }
        }
        if m * m == i {
            array[i] -= 1;
        }
    }

    let res: usize = array
        .into_iter()
        .enumerate()
        .map(|(i, v)| {
            i * v
        }).sum();

    println!("{}", res);
}