n = int(input()) mod = 10 ** 9 + 7 ans = 0 # 次数が2次以上 # nをi進数に直すイメージ for i in range(2, int(n ** .5) + 1): now = n while now > 0: ans += now % i # 下の桁から埋める now //= i ans += now ans %= mod # i * x + jを考える sq = int(n ** .5) + 1 for i in range(1, sq): l = n // (i + 1) + 1 # xの係数がiである数のうち、最も小さい if l < sq: # これは2次以上で数えた break r = n // i # 最もでかい m = r - l + 1 one = i * m # xの係数の合計 # 0次の係数について考える # 区間[l, r]の数は連続してるので、総和でうまくいける # 初項n % r, 公差i 項数 m → 総和 zero = m * (2 * (n % r) + (m - 1) * i) // 2 % mod ans = (ans + one + zero) % mod print(ans)