← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	C := make([]int, 32)
	for i := 0; i < n; i++ {
		scanner.Scan()
		a, _ := strconv.Atoi(scanner.Text())
		v2 := 0
		for a%2 == 0 && a > 0 {
			v2++
			a /= 2
		}
		C[v2]++
	}

	MOD := int64(1000000007)
	pow2 := make([]int64, n+1)
	pow2[0] = 1
	for i := 1; i <= n; i++ {
		pow2[i] = (pow2[i-1] * 2) % MOD
	}

	S := make([]int, 32)
	sum := 0
	for i := 31; i >= 0; i-- {
		S[i] = sum
		sum += C[i]
	}

	ans := int64(0)

	if C[0] > 0 {
		ways := (pow2[C[0]] - 1 + MOD) % MOD
		ways = (ways * pow2[S[0]]) % MOD
		ans = (ans + ways) % MOD
	}

	for k := 1; k < 32; k++ {
		if C[k] > 0 {
			ways := (pow2[C[k]-1] - 1 + MOD) % MOD
			ways = (ways * pow2[S[k]]) % MOD
			ans = (ans + ways) % MOD
		}
	}

	fmt.Println(ans)
}