← Home
```go
package main

import "fmt"

const MOD int64 = 1000000007

func modPow(base, exp, mod int64) int64 {
	res := int64(1)
	base %= mod
	for exp > 0 {
		if exp%2 == 1 {
			res = res * base % mod
		}
		base = base * base % mod
		exp /= 2
	}
	return res
}

func modInverse(a, mod int64) int64 {
	return modPow(a, mod-2, mod)
}

func main() {
	var m int
	fmt.Scan(&m)

	divs := make([][]int, m+1)
	for i := 1; i <= m; i++ {
		for j := i; j <= m; j += i {
			divs[j] = append(divs[j], i)
		}
	}

	mu := make([]int, m+1)
	mu[1] = 1
	vis := make([]bool, m+1)
	var primes []int
	for i := 2; i <= m; i++ {
		if !vis[i] {
			primes = append(primes, i)
			mu[i] = -1
		}
		for _, p := range primes {
			if i*p > m {
				break
			}
			vis[i*p] = true
			if i%p == 0 {
				mu[i*p] = 0
				break
			} else {
				mu[i*p] = -mu[i]
			}
		}
	}

	E := make([]int64, m+1)
	for d := 2; d <= m; d++ {
		var sumPart int64 = 0
		var cntSelfMod int64 = 0
		for _, g := range divs[d] {
			if g == 1 {
				continue
			}
			k := d / g
			N := m / g
			var cnt int64 = 0
			for _, t := range divs[k] {
				if mu[t] == 0 {
					continue
				}
				cnt += int64(mu[t]) * int64(N/t)
			}
			cntMod := (cnt % MOD + MOD) % MOD
			if g == d {
				cntSelfMod = cntMod
			} else {
				sumPart = (sumPart + cntMod*E[g]%MOD) % MOD
			}
		}
		invm := modInverse(int64(m), MOD)
		coefSelf := invm * cntSelfMod % MOD
		denom := (int64(1) - coefSelf + MOD) % MOD
		rhs := (int64(1) + invm*sumPart%MOD) % MOD
		denomInv := modInverse(denom, MOD)
		E[d] = rhs * denomInv % MOD
	}

	var sumE int64 = 0
	for x := 2; x <= m; x++ {
		sumE = (sumE + E[x]) % MOD
	}
	invm := modInverse(int64(m), MOD)
	ans := (int64(1) + invm*sumE%MOD) % MOD
	fmt.Println(ans)
}
```