```go
package main
import (
"bufio"
"fmt"
"os"
)
const MAXN = 1000000
const MOD = 1000000007
var ans [MAXN + 1]int
func readInt(reader *bufio.Reader) int {
var res int
for {
c, err := reader.ReadByte()
if err != nil {
return res
}
if c >= '0' && c <= '9' {
res = int(c - '0')
break
}
}
for {
c, err := reader.ReadByte()
if err != nil || c < '0' || c > '9' {
break
}
res = res*10 + int(c-'0')
}
return res
}
func main() {
isPrime := make([]bool, MAXN+1)
for i := 2; i <= MAXN; i++ {
isPrime[i] = true
}
primes := []int{}
for i := 2; i <= MAXN; i++ {
if isPrime[i] {
primes = append(primes, i)
for j := i * 2; j <= MAXN; j += i {
isPrime[j] = false
}
}
}
D := make([]int, MAXN+2)
for _, p := range primes {
limit := MAXN / p
for k := 1; k <= limit; k++ {
v := (p - (k % p)) % p
if v > 0 {
start := k * p
end := start + p
D[start] = (D[start] + v) % MOD
if end <= MAXN {
D[end] = (D[end] - v + MOD) % MOD
}
}
}
}
current := 0
for i := 1; i <= MAXN; i++ {
current = (current + D[i]) % MOD
val := current
if i%8 >= 4 {
val = (val + 2) % MOD
}
ans[i] = (ans[i-1] + val) % MOD
}
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
t := readInt(reader)
for idx := 0; idx < t; idx++ {
n := readInt(reader)
fmt.Fprintln(writer, ans[n])
}
}
```