import java.io.*;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.*;
import java.lang.*;
import java.util.concurrent.LinkedBlockingDeque;

import static java.lang.Math.*;
public class Main implements Runnable {
    public static void main(String[] args) {
        new Thread(null, new Main(), "Check2", 1 << 28).start();// to increse stack size in java
    }
    long mod=(long)(1e9+7);
    public void run() {
      
        Scanner in=new Scanner(System.in);
        PrintWriter w = new PrintWriter(System.out);


        int t=in.nextInt();
        int N=(int)(1e6+15);
        while (t-->0) {
            int n = in.nextInt();
            int array[] = new int[n];

            for(int i=0;i<n;i++)array[i]=in.nextInt();

            list=new ArrayList[N];
            int frq[]=new int[N];
            int b[]=new int[N];
            sev(b,b.length-1);
            for(int i=0;i<N;i++)list[i]=new ArrayList<>();
            for(int i=0;i<n;i++){
                frq[array[i]]++;
            }

            for(int i=2;i<N;i++){
                if(b[i]>0) {
                    for (int j = i; j < N; j += i) {
                        if(frq[j]>0){
                            int tmp=frq[j];
                            while (tmp-->0){
                                list[i].add(j);
                                list[j].add(i);
                            }
                        }
                    }
                }
            }
            int size=frq[1];
            int v[]=new int[N];
            for(int i=2;i<N;i++){
                if(b[i]>0){
                    nodes=0;
                    dfs(i,frq,v);
                     if(nodes>0){
                       size++;
                    }
                }
            }
            long ans=power(2,size);
            ans=ans-2+mod;
            ans%=mod;
            w.println(ans);
        }
        w.close();
    }
    ArrayList <Integer> list[];
    int nodes=0;

    void dfs(int i,int frq[],int v[]){
        if(v[i]==1)return;
        v[i]=1;
        if(frq[i]>0) {
            nodes++;
        }
        for(int itr:list[i]){
            dfs(itr,frq,v);
        }
    }
    long power(long x,long y){
        if(y==0)return 1%mod;
        if(y==1)return x%mod;
        long res=1;
        x=x%mod;
        while(y>0)
        {
            if((y%2)!=0){
                res=(res*x)%mod;
            }
            y=y/2;
            x=(x*x)%mod;
        }
        return res;
    }
    void sev(int a[],int n){

        for(int i=2;i<=n;i++)a[i]=i;
        for(int i=2;i<=n;i++){

            if(a[i]!=0){
                for(int j=2*i;j<=n;){

                    a[j]=0;
                    j=j+i;
                }
            }

        }

    }
}