import java.util.*;
public class Main {
static class Cell{
int x,y;
Cell(int x,int y){
this.x=x;
this.y=y;
}
}
static final int MAX=1000000;
static final long MOD=1000000007L;
static int[][] grid;
static int n,m;
static int[][] comp;
static boolean[][] vis;
static int[] dx={1,-1,0,0};
static int[] dy={0,0,1,-1};
static ArrayList<ArrayList<Cell>> components=new ArrayList<>();
static void bfs(int sx,int sy,int id){
Queue<Cell> q=new LinkedList<>();
q.add(new Cell(sx,sy));
vis[sx][sy]=true;
comp[sx][sy]=id;
ArrayList<Cell> list=new ArrayList<>();
while(!q.isEmpty()){
Cell cur=q.poll();
list.add(cur);
for(int k=0;k<4;k++){
int nx=cur.x+dx[k];
int ny=cur.y+dy[k];
if(nx>=0 && ny>=0 && nx<n && ny<m){
if(grid[nx][ny]>0 && !vis[nx][ny]){
vis[nx][ny]=true;
comp[nx][ny]=id;
q.add(new Cell(nx,ny));
}
}
}
}
components.add(list);
}
public static void main
(String[] args
){
Scanner sc
=new Scanner
(System.
in);
n=sc.nextInt();
m=sc.nextInt();
grid=new int[n][m];
comp=new int[n][m];
vis=new boolean[n][m];
HashMap
<Integer,Integer
> freq
=new HashMap
<>();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
grid[i][j]=sc.nextInt();
if(grid[i][j]>0){
freq.put(grid[i][j],
freq.getOrDefault(grid[i][j],0)+1);
}
}
}
int id=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]>0 && !vis[i][j]){
bfs(i,j,id++);
}
}
}
long finalAnswer=0;
for(ArrayList<Cell> component:components){
// Remove current component
for(Cell c:component){
int val=grid[c.x][c.y];
freq.put(val,freq.get(val)-1);
if(freq.get(val)==0)
freq.remove(val);
}
// Calculate sed values
for(Cell c:component){
int val=grid[c.x][c.y];
long sed=0;
for(int multiple=val;
multiple<=MAX;
multiple+=val){
if(f!=null){
sed += (long)multiple*f;
}
}
finalAnswer=(finalAnswer+sed)%MOD;
}
// Restore component
for(Cell c:component){
int val=grid[c.x][c.y];
freq.put(val,
freq.getOrDefault(val,0)+1);
}
}
System.
out.
println(finalAnswer
%MOD
);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHN0YXRpYyBjbGFzcyBDZWxsewogICAgICAgIGludCB4LHk7CiAgICAgICAgQ2VsbChpbnQgeCxpbnQgeSl7CiAgICAgICAgICAgIHRoaXMueD14OwogICAgICAgICAgICB0aGlzLnk9eTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGZpbmFsIGludCBNQVg9MTAwMDAwMDsKICAgIHN0YXRpYyBmaW5hbCBsb25nIE1PRD0xMDAwMDAwMDA3TDsKCiAgICBzdGF0aWMgaW50W11bXSBncmlkOwogICAgc3RhdGljIGludCBuLG07CgogICAgc3RhdGljIGludFtdW10gY29tcDsKICAgIHN0YXRpYyBib29sZWFuW11bXSB2aXM7CgogICAgc3RhdGljIGludFtdIGR4PXsxLC0xLDAsMH07CiAgICBzdGF0aWMgaW50W10gZHk9ezAsMCwxLC0xfTsKCiAgICBzdGF0aWMgQXJyYXlMaXN0PEFycmF5TGlzdDxDZWxsPj4gY29tcG9uZW50cz1uZXcgQXJyYXlMaXN0PD4oKTsKCiAgICBzdGF0aWMgdm9pZCBiZnMoaW50IHN4LGludCBzeSxpbnQgaWQpewoKICAgICAgICBRdWV1ZTxDZWxsPiBxPW5ldyBMaW5rZWRMaXN0PD4oKTsKCiAgICAgICAgcS5hZGQobmV3IENlbGwoc3gsc3kpKTsKCiAgICAgICAgdmlzW3N4XVtzeV09dHJ1ZTsKCiAgICAgICAgY29tcFtzeF1bc3ldPWlkOwoKICAgICAgICBBcnJheUxpc3Q8Q2VsbD4gbGlzdD1uZXcgQXJyYXlMaXN0PD4oKTsKCiAgICAgICAgd2hpbGUoIXEuaXNFbXB0eSgpKXsKCiAgICAgICAgICAgIENlbGwgY3VyPXEucG9sbCgpOwoKICAgICAgICAgICAgbGlzdC5hZGQoY3VyKTsKCiAgICAgICAgICAgIGZvcihpbnQgaz0wO2s8NDtrKyspewoKICAgICAgICAgICAgICAgIGludCBueD1jdXIueCtkeFtrXTsKICAgICAgICAgICAgICAgIGludCBueT1jdXIueStkeVtrXTsKCiAgICAgICAgICAgICAgICBpZihueD49MCAmJiBueT49MCAmJiBueDxuICYmIG55PG0pewoKICAgICAgICAgICAgICAgICAgICBpZihncmlkW254XVtueV0+MCAmJiAhdmlzW254XVtueV0pewoKICAgICAgICAgICAgICAgICAgICAgICAgdmlzW254XVtueV09dHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBbbnhdW255XT1pZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHEuYWRkKG5ldyBDZWxsKG54LG55KSk7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGNvbXBvbmVudHMuYWRkKGxpc3QpOwoKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKCiAgICAgICAgU2Nhbm5lciBzYz1uZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwoKICAgICAgICBuPXNjLm5leHRJbnQoKTsKICAgICAgICBtPXNjLm5leHRJbnQoKTsKCiAgICAgICAgZ3JpZD1uZXcgaW50W25dW21dOwoKICAgICAgICBjb21wPW5ldyBpbnRbbl1bbV07CgogICAgICAgIHZpcz1uZXcgYm9vbGVhbltuXVttXTsKCiAgICAgICAgSGFzaE1hcDxJbnRlZ2VyLEludGVnZXI+IGZyZXE9bmV3IEhhc2hNYXA8PigpOwoKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKCiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8bTtqKyspewoKICAgICAgICAgICAgICAgIGdyaWRbaV1bal09c2MubmV4dEludCgpOwoKICAgICAgICAgICAgICAgIGlmKGdyaWRbaV1bal0+MCl7CgogICAgICAgICAgICAgICAgICAgIGZyZXEucHV0KGdyaWRbaV1bal0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxLmdldE9yRGVmYXVsdChncmlkW2ldW2pdLDApKzEpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpbnQgaWQ9MDsKCiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CgogICAgICAgICAgICBmb3IoaW50IGo9MDtqPG07aisrKXsKCiAgICAgICAgICAgICAgICBpZihncmlkW2ldW2pdPjAgJiYgIXZpc1tpXVtqXSl7CgogICAgICAgICAgICAgICAgICAgIGJmcyhpLGosaWQrKyk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGxvbmcgZmluYWxBbnN3ZXI9MDsKCiAgICAgICAgZm9yKEFycmF5TGlzdDxDZWxsPiBjb21wb25lbnQ6Y29tcG9uZW50cyl7CgogICAgICAgICAgICAvLyBSZW1vdmUgY3VycmVudCBjb21wb25lbnQKICAgICAgICAgICAgZm9yKENlbGwgYzpjb21wb25lbnQpewoKICAgICAgICAgICAgICAgIGludCB2YWw9Z3JpZFtjLnhdW2MueV07CgogICAgICAgICAgICAgICAgZnJlcS5wdXQodmFsLGZyZXEuZ2V0KHZhbCktMSk7CgogICAgICAgICAgICAgICAgaWYoZnJlcS5nZXQodmFsKT09MCkKICAgICAgICAgICAgICAgICAgICBmcmVxLnJlbW92ZSh2YWwpOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHNlZCB2YWx1ZXMKICAgICAgICAgICAgZm9yKENlbGwgYzpjb21wb25lbnQpewoKICAgICAgICAgICAgICAgIGludCB2YWw9Z3JpZFtjLnhdW2MueV07CgogICAgICAgICAgICAgICAgbG9uZyBzZWQ9MDsKCiAgICAgICAgICAgICAgICBmb3IoaW50IG11bHRpcGxlPXZhbDsKICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTw9TUFYOwogICAgICAgICAgICAgICAgICAgIG11bHRpcGxlKz12YWwpewoKICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGY9ZnJlcS5nZXQobXVsdGlwbGUpOwoKICAgICAgICAgICAgICAgICAgICBpZihmIT1udWxsKXsKCiAgICAgICAgICAgICAgICAgICAgICAgIHNlZCArPSAobG9uZyltdWx0aXBsZSpmOwoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZpbmFsQW5zd2VyPShmaW5hbEFuc3dlcitzZWQpJU1PRDsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFJlc3RvcmUgY29tcG9uZW50CiAgICAgICAgICAgIGZvcihDZWxsIGM6Y29tcG9uZW50KXsKCiAgICAgICAgICAgICAgICBpbnQgdmFsPWdyaWRbYy54XVtjLnldOwoKICAgICAgICAgICAgICAgIGZyZXEucHV0KHZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgZnJlcS5nZXRPckRlZmF1bHQodmFsLDApKzEpOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaW5hbEFuc3dlciVNT0QpOwoKICAgIH0KCn0=