------
## 最终结论
```python
def maxNonNegativeProduct(grid):
    rows, cols = len(grid), len(grid[0])
    
    # Initialize DP tables for maximum and minimum product paths
    max_product = [[0] * cols for _ in range(rows)]
    min_product = [[0] * cols for _ in range(rows)]
    
    # Set the starting point (0, 0)
    max_product[0][0] = grid[0][0]
    min_product[0][0] = grid[0][0]
    
    # Fill the DP tables
    for i in range(rows):
        for j in range(cols):
            if i == 0 and j == 0:
                continue
            
            current_value = grid[i][j]
            candidates = []
            
            if i > 0:  # From above
                candidates.append((max_product[i-1][j], min_product[i-1][j]))
            if j > 0:  # From left
                candidates.append((max_product[i][j-1], min_product[i][j-1]))
            
            max_val, min_val = float('-inf'), float('inf')
            
            for max_p, min_p in candidates:
                max_val = max(max_val, max_p * current_value, min_p * current_value)
                min_val = min(min_val, max_p * current_value, min_p * current_value)
                
            max_product[i][j] = max_val
            min_product[i][j] = min_val
    
    # Calculate result
    final_max_product = max_product[rows - 1][cols - 1]
    if final_max_product < 0:
        return -1
    else:
        return final_max_product % (10**9 + 7)
```