#include <bits/stdc++.h>
using namespace std;

int N;long long base=1000000007LL;

int main() {
  cin >> N;
  long long A[3][N];long long count=3LL;
  for (int i=0;i<N;i++) {
    for (int j=0;j<3;j++) {
      A[j][i]=0LL;
    }
  }
  for (int i=0;i<N;i++) {
    long long x;cin >> x;
    if (i==0) {
      A[0][0]=1LL;
      if (x!=0) count=0LL;
    }
    else {
      long long y=0LL;bool tuika=false;
      for (int j=0;j<3;j++) {
        if (A[j][i-1]==x) {
          y++;
          if (!tuika) {
            A[j][i]=A[j][i-1]+1LL;
            tuika=true;
          }
          else A[j][i]=A[j][i-1];
        }
        else A[j][i]=A[j][i-1];
      }
      count*=y;
      count=count%base;
    }
  }
  cout << count << endl;
}
#include <bits/stdc++.h>
using namespace std;

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

using ll = long long;
using P = pair<int,int>;

const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
const int INF = 1<<30;
const ll mod = 1000000007LL;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
    int N;
    cin>>N;
    vector<int> A(N);
    rep(i,N) cin>>A[i];
    map<int,int> m;
    m[0]=3;
    ll ans = 1;
    rep(i,N){
        ans = (ans*m[A[i]])%mod;
        m[A[i]]--;
        m[A[i]+1]++;
    }
    cout<<ans<<endl;
}