#include <bits/stdc++.h>
using namespace std;
const long long INFLL = 1e18;
const int INF = 1e9 + 1;
const int mod = 1e9 + 7;
long long mul(long long a, long long b) { return (a * b) % mod; }
long long add(long long a, long long b) { return ((a + b) % mod + mod) % mod; }
long long my_pow(long long n, long long m) {
  if (m == 0) return 1;
  long long now = my_pow(n, m / 2);
  if (m % 2 == 0)
    return (now * now) % mod;
  else
    return (((now * now) % mod) * n) % mod;
}
long long rev(long long a) { return my_pow(a, mod - 2); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  vector<long long> a(n);
  for (auto &c : a) cin >> c;
  vector<vector<long long>> h(n, vector<long long>(1 << n));
  for (int i = 0; i < n; i++) {
    for (int mask = 0; mask < (1 << n); mask++) {
      if (mask & (1 << i)) continue;
      h[i][mask] = 1;
      for (int j = 0; j < n; j++) {
        if (mask & (1 << j))
          h[i][mask] = mul(h[i][mask], mul(a[i], rev(add(a[i], a[j]))));
      }
    }
  }
  vector<long long> f(1 << n);
  long long ans = 0;
  for (int mask = 1; mask < (1 << n); mask++) {
    long long x = 1;
    for (int j = 0; j < n; j++) {
      if (!(mask & (1 << j))) continue;
      x = mul(x, h[j][((1 << n) - 1) ^ mask]);
    }
    long long y = 1;
    for (int mask1 = mask; mask1 > 0; mask1 = (mask1 - 1) & mask) {
      if (mask1 == mask) continue;
      long long z = 1;
      for (int j = 0; j < n; j++) {
        if (!(mask1 & (1 << j))) continue;
        z = mul(z, h[j][((1 << n) - 1) ^ mask]);
      }
      y = add(y, -mul(f[mask1], rev(z)));
    }
    f[mask] = mul(x, y);
    ans = add(ans, mul(f[mask], __builtin_popcount(mask)));
  }
  cout << ans;
  return 0;
}
