만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

LCM(i, j)

시간 제한1초메모리 제한256 MB

요약
1 이상 n 이하의 모든 쌍 i<j의 최소공배수를 더해 1,000,000,007로 나눈 나머지를 구합니다.
난이도

보통10점 중 7점

유형
정수론, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

재현이는 다음 소스를 작성했다.

long long mod = 1000000007;
long long all_pair_lcm(int n) {
    long long ans = 0;
    for (int i=1; i<=n-1; i++) {
        for (int j=i+1; j<=n; j++) {
            ans += lcm(i, j);
            ans %= mod;
        }
    }
    return ans;
}

lcm(i, j)는 i와 j의 최소공배수를 구하는 함수다. n이 크면 이 이중 반복문은 시간 안에 끝나지 않는다.

n이 주어졌을 때 all_pair_lcm(n)의 반환값을 출력하는 프로그램을 작성하시오. 즉 1≤i<j≤n1 \le i < j \le n을 만족하는 모든 쌍 (i,j)(i, j)에 대해 lcm⁡(i,j)\operatorname{lcm}(i, j)를 더한 뒤, 그 합을 109+710^9 + 7로 나눈 나머지를 구한다.

입력

첫째 줄에 n이 주어진다. (1≤n≤1061 \le n \le 10^6)

출력

첫째 줄에 all_pair_lcm(n)의 반환값을 출력한다.

예제4

  1. 예제 1

    입력
    2
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5
    
    예상 출력
    81
    
  3. 예제 3

    입력
    10
    
    예상 출력
    1036
    
  4. 예제 4

    입력
    25
    
    예상 출력
    38682