#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const long long maxn = 3e6;
const long long mod = 1e9 + 7;
const long double PI = acos((long double)-1);
long long pw(long long a, long long b, long long md = mod) {
  long long res = 1;
  while (b) {
    if (b & 1) {
      res = (a * res) % md;
    }
    a = (a * a) % md;
    b >>= 1;
  }
  return (res);
}
int n;
long long l[maxn], r[maxn];
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> l[i];
  for (int i = 0; i < n; i++) cin >> r[i];
  long long p = 1, q = 0, sum = 0, sm = 0;
  for (int i = 0; i < n; i++) {
    if (i) {
      long long a = max(0LL, min(r[i], r[i - 1]) - max(l[i], l[i - 1]) + 1);
      long long b = (r[i] - l[i] + 1) * (r[i - 1] - l[i - 1] + 1) % mod;
      p = ((b - a + mod) % mod * pw(b, mod - 2)) % mod;
    }
    sum = (sum + p) % mod;
    sm = (sm + pw(p, 2) + (2LL * (p - 1) * (q - 1)) % mod + mod) % mod;
    q = p;
  }
  long long ans = (sum * (sum + 1) - sm + mod * 100LL) % mod;
  for (int i = 2; i < n; i++) {
    long long a = max(0LL, min({r[i], r[i - 1], r[i - 2]}) -
                               max({l[i], l[i - 1], l[i - 2]}) + 1);
    long long b = max(0LL, r[i - 2] - l[i - 2] + 1);
    b = (b * max(0LL, r[i - 1] - l[i - 1] + 1)) % mod;
    b = (b * max(0LL, r[i] - l[i] + 1)) % mod;
    p = (a * pw(b, mod - 2)) % mod;
    ans = (ans + 2 * p) % mod;
  }
  cout << ans << '\n';
  return (0);
}
