Với số nguyên dương x, ký hiệu σ(x) là tổng tất cả ước dương của x.
Cho N, hãy tính
σ(1)+σ(2)+⋯+σ(N)
và in phần dư của kết quả khi chia cho 1,000,000,007.
Input
Một dòng chứa số nguyên N.
Output
In giá trị tổng theo modulo 1,000,000,007.
Constraints
1≤N≤1012.
Scoring
Subtask 1 (50% số điểm): N≤106.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
10
Output
87
Giải thích: Các tổng ước từ 1 tới 10 lần lượt là 1,3,4,7,6,12,8,15,13,18; cộng lại được 87.
Lời giải tóm tắt
Biến đổi tổng: Mỗi ước d xuất hiện trong σ(x) đúng khi d chia hết x. Trong đoạn 1..N có floor(N/d) bội của d, vì vậy
Biến đổi tổng:Σ_{x=1..N} σ(x) = Σ_{d=1..N} d·floor(N/d).
Biến đổi tổng: Không thể duyệt tới N=10^12. Tuy nhiên, giá trị floor(N/d) không đổi trên một đoạn liên tiếp. Nếu đang ở l, đặt q=floor(N/l) thì điểm cuối lớn nhất cùng thương là r=floor(N/q). Đóng góp của cả đoạn là
Biến đổi tổng:q·(l+(l+1)+...+r).
Chứng minh đúng: Phép đổi thứ tự đếm gán cho mỗi cặp (d,x) với d|x đúng một đóng góp d, nên công thức đầu bằng tổng cần tìm. Các đoạn [l,r] do thuật toán tạo rời nhau, phủ toàn bộ 1..N và trong mỗi đoạn có cùng thương q; tổng cấp số cộng vì vậy tính đúng đóng góp của mọi d. Cộng các đoạn cho kết quả chính xác.
Độ phức tạp: Số thương khác nhau là O(sqrt(N)), nên thời gian O(sqrt(N)), bộ nhớ O(1).