#include <bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ll long long 
#define pb push_back
#define fo(i,N) for(int i = 0 ; i < N ; i++)
#define foo(i,x,N) for (int i = x; i < N ; i++)
#define fill(a,val) memset(a,val,sizeof(a))
#define fastio()  ios_base::sync_with_stdio(false); cin.tie(NULL);
#define endl '\n'
#define ff first
#define ss second
#define MAX 200005
ll sum[MAX+5] = {0};
ll pcount[MAX+5] = {0};
ll prod[MAX+5] = {0};
ll scount[MAX+5] = {0};

int N;


ll query(ll bit[],int x)
{ 
  ll ans = 0;

  for(; x>0 ; x -= x&-x)
  ans = (ans%M+bit[x]%M)%M;

  return ans;
}

void update(ll bit[],int idx,ll val,int k)
{
  for(; idx <= k; idx+= idx&-idx)
  bit[idx] = (bit[idx]%M+val%M)%M;
}



int main()
{ 
  
  int T;
  cin >> T;
  while ( T--)
  { fill(sum,0);
    fill(pcount,0);
    fill(prod,0);
    fill(scount,0);
    int N;
    cin >> N;
    pair <ll,int> arr[N];
    // set <ll> s;
    
    fo(i,N)
    {
      cin >> arr[i].ff;
      // s.insert(arr[i]);
    }
    int m = 0;
    fo(i,N)
    {
      cin >> arr[i].ss;
      m = max(m,arr[i].ss);

    }
    // int index = 1;
    // unordered_map <ll,int> mp;
    // ll ans = 0;
    // for ( auto it = s.begin();it != s.end();it++)
    // {
    //   mp[*it] = index++;
    // }
    ll ans = 0;
    sort(arr,arr+N);

    ll tempsum;
    ll tempcount;
    ll tempprod;
    ll temp;
    fo(i,N)
    {
       tempsum = query(sum,arr[i].ss);
       tempcount = query(pcount,arr[i].ss);
       //cout << ((tempcount%M*(arr[i].ss%M*arr[i].ff%M)%M)%M) << " " << ((arr[i].ss%M*tempsum))%M << endl;
       ans = (ans%M+(((tempcount%M*(arr[i].ss%M*arr[i].ff%M)%M)%M)- ((arr[i].ss%M*tempsum))%M)%M)%M;
       if ( ans < 0) ans = ans+M;
       tempprod = query(prod,m) - query(prod,arr[i].ss);
       if ( tempprod < 0 ) tempprod += M;
       temp = query(scount,m)-query(scount,arr[i].ss);
       if ( temp <0 ) temp = temp+M;
       //cout << "ans" << " " << ans << endl;
       tempprod = ((temp%M*arr[i].ff%M)%M - tempprod%M)%M;
       //cout << tempsum << " "<< tempcount << " "<< tempprod << endl;
       ans  = (ans%M+tempprod%M)%M;
       if (ans <0) ans = ans+M;
       update(sum,arr[i].ss,arr[i].ff%M,m);
       update(pcount,arr[i].ss,1,m);
       update(prod,arr[i].ss,(arr[i].ff%M*arr[i].ss)%M,m);
       update(scount,arr[i].ss,arr[i].ss,m);






    }
    cout << ans%M << endl;



  }

}