#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define SZ(x) ((int)x.size())
#define L(i,u) for (register int i=head[u]; i; i=nxt[i])
#define rep(i,a,b) for (register int i=(a); i<=(b); i++)
#define per(i,a,b) for (register int i=(a); i>=(b); i--)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef pair<int,int> Pii;
typedef vector<int> Vi;
template<class T> inline void read(T &x){
	x=0; char c=getchar(); int f=1;
	while (!isdigit(c)) {if (c=='-') f=-1; c=getchar();}
	while (isdigit(c)) {x=x*10+c-'0'; c=getchar();} x*=f;
}
template<class T> inline void umin(T &x, T y){x=x<y?x:y;}
template<class T> inline void umax(T &x, T y){x=x>y?x:y;}
inline ui R() {
	static ui seed=416;
	return seed^=seed>>5,seed^=seed<<17,seed^=seed>>13;
}
const int N = 1505, inf = 0x3f3f3f3f;
int n,l[N][N],r[N][N],dfn[N][N],pos[N][N];char s[N][N];
ll f[N][N],res;
int main() {
	memset(s,'#',sizeof(s));read(n);rep(i,1,n)scanf("%s",s[i]+1);
	memset(l,inf,sizeof(l));
	per(i,n,1){
		rep(j,1,n){
			if(s[i][j]!='#')l[i][j]=r[i][j]=j;else l[i][j]=inf,r[i][j]=0;
			l[i+1][j]=inf,r[i+1][j]=0;
		}
		per(j,i,1)per(k,n,1)
		if(s[j][k]=='#')l[j][k]=inf,r[j][k]=0;
		else{
			if(j<i){r[j][k]=max(r[j][k+1],r[j+1][k]);l[j][k]=min(l[j][k+1],l[j+1][k]);}
			else{umax(r[j][k],r[j][k+1]);umin(l[j][k],l[j][k+1]);}
		//	if(s[j][k]!='#'&&s[j][k+1]!='#'&&s[j+1][k]!='#'){
				if(dfn[j][k]==i+1&&r[j+1][k]<pos[j][k])f[j][k]-=f[i+1][pos[j][k]];
				if(r[j+1][k]>=l[j][k+1])dfn[j][k]=i,pos[j][k]=l[j][k+1];
		//	}
			//printf("%d %d -- %d %d\n",j,k,l[j][k],r[j][k]);
		}
		per(j,n,1)if(s[i][j]!='#'){
		//	printf("%d %d:%lld %lld\n",i,j,f[i][j],f[i+1][j]+f[i][j+1]+f[i][j]);
			f[i][j]+=f[i+1][j]+f[i][j+1];ll c=s[i][j]-'0';
			res+=c*f[i][j];f[i][j]+=c;
		}
	}
	cout<<res;return 0;
}
