#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int MOD=1e9+7;
inline int read(){
int x=0,f=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-')f*=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x*f;
}
inline void write(int x){
if(x<10)putchar(x+'0');
else write(x/10),putchar(x%10+'0');
}
int n;
int a[10][10],ans[10][10];
inline void matrix_pow1(){
int c[10][10]={0};
for(int k=1;k<=3;k++)
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
c[i][j]=(c[i][j]+ans[i][k]*a[k][j])%MOD;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
ans[i][j]=c[i][j];
}
inline void matrix_pow2(){
int c[10][10]={0};
for(int k=1;k<=3;k++)
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
c[i][j]=(c[i][j]+a[i][k]*a[k][j])%MOD;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
a[i][j]=c[i][j];
}
signed main(){
n=read();
a[1][1]=2,a[1][2]=1,a[1][3]=0;
a[3][1]=1,a[3][2]=0,a[3][3]=4;
for(int i=1;i<=3;i++)
ans[i][i]=1;
n-=1;
while(n){
if(n&1)matrix_pow1();
matrix_pow2();
n/=2;
}
int a1=(3*(ans[1][1]%MOD))%MOD;
int a2=(4*(ans[3][1]%MOD))%MOD;
write((a1+a2)%MOD);
}