package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
var fact, ifact []int64
func modPow(a, e int64) int64 {
res := int64(1)
for e > 0 {
if e&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
e >>= 1
}
return res
}
func comb(n, k int) int64 {
if k < 0 || k > n {
return 0
}
return fact[n] * ifact[k] % MOD * ifact[n-k] % MOD
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
ns := make([]int, t)
mx := 0
for i := 0; i < t; i++ {
fmt.Fscan(in, &ns[i])
if ns[i] > mx {
mx = ns[i]
}
}
limit := mx + 1
fact = make([]int64, limit+1)
ifact = make([]int64, limit+1)
fact[0] = 1
for i := 1; i <= limit; i++ {
fact[i] = fact[i-1] * int64(i) % MOD
}
ifact[limit] = modPow(fact[limit], MOD-2)
for i := limit; i >= 1; i-- {
ifact[i-1] = ifact[i] * int64(i) % MOD
}
memo := make([]int64, mx+1)
for i := range memo {
memo[i] = -1
}
for _, n := range ns {
if memo[n] == -1 {
ans := int64(0)
for m := 0; m <= (n-1)/2; m++ {
term := int64(m+1) * comb(n+1, m) % MOD
ans += term
if ans >= MOD {
ans -= MOD
}
}
for m := (n + 1) / 2; m <= n; m++ {
term := int64(2*m+1) % MOD * comb(n, m) % MOD
ans += term
if ans >= MOD {
ans -= MOD
}
}
memo[n] = ans
}
fmt.Fprintln(out, memo[n])
}
}