#include using namespace std; const long long MOD = 1000000007; struct fraction{ long long a, b; fraction(){ } fraction(long long a, long long b): a(a), b(b){ } bool operator <(fraction x) const{ return a * x.b < x.a * b; } }; int main(){ int N; cin >> N; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector B(N); for (int i = 0; i < N; i++){ cin >> B[i]; } vector> P(N); for (int i = 0; i < N; i++){ P[i] = make_pair(fraction(A[i], 1 + B[i]), i); } sort(P.begin(), P.end()); long long ans = 0; long long x = 1; for (int i = 0; i < N; i++){ int p = P[i].second; ans += x * A[p] % MOD; x *= B[p]; x %= MOD; } ans %= MOD; cout << ans << endl; }