#include <bits/stdc++.h>
using namespace std;
int i, j, m, n, u, v;
long long a[15], mod, lose[14][16389], f[16389], g[16389][15];
long long sz[16389], inv[16389];
long long getinv(long long a, long long p) {
  if (a == 1) return 1;
  long long k = a - getinv(p % a, a);
  return (k * p + 1) / a;
}
long long group_lose(int v, int u) {
  int i, j;
  long long ret;
  ret = f[v] * f[u - v] % mod * g[u - v][sz[v]] % mod * inv[u] % mod;
  return ret;
}
int main() {
  mod = 1000000007;
  scanf("%d", &n);
  for (i = 0; i <= n - 1; i++) {
    scanf("%lld", &a[i]);
  }
  for (u = 0; u <= (1 << n) - 1; u++) {
    sz[u] = 0;
    for (i = 0; i <= n - 1; i++)
      if (u & (1 << i)) sz[u]++;
  }
  for (u = 0; u <= (1 << n) - 1; u++) {
    f[u] = 1;
    for (i = 0; i <= n - 1; i++)
      if (u & (1 << i)) {
        for (j = i + 1; j <= n - 1; j++)
          if (u & (1 << j)) {
            f[u] = f[u] * (a[i] + a[j]) % mod;
          }
      }
    inv[u] = getinv(f[u], mod);
  }
  for (u = 0; u <= (1 << n) - 1; u++) {
    g[u][0] = 1;
    g[u][1] = 1;
    for (i = 0; i <= n - 1; i++)
      if (u & (1 << i)) {
        g[u][1] = g[u][1] * a[i] % mod;
      }
    for (i = 2; i <= n; i++) {
      g[u][i] = g[u][i - 1] * g[u][1] % mod;
    }
  }
  for (u = 0; u <= (1 << n) - 1; u++) {
    for (i = 0; i <= n - 1; i++) {
      if (u & (1 << i)) {
        lose[i][u] = 0;
        for (v = u; v; v = (v - 1) & u)
          if ((v != u) && (v & (1 << i))) {
            long long temp = group_lose(v, u);
            lose[i][u] += (1 - lose[i][v] + mod) * temp % mod;
          }
        lose[i][u] %= mod;
      }
    }
  }
  long long ans = 0;
  for (i = 0; i <= n - 1; i++) {
    ans += (1 - lose[i][(1 << n) - 1] + mod);
  }
  ans %= mod;
  printf("%lld\n", ans);
  return 0;
}
