"""Flattens a nested dictionary into a single-level dictionary with concatenated keys.

The function recursively traverses the input dictionary, concatenating keys with a specified
separator to create flattened keys. Nested dictionaries are handled by recursively flattening
them and merging the results.

Args:
    dictionary (MutableMapping): The nested dictionary to flatten.
    prefix (str, optional): A prefix to prepend to all keys. Defaults to an empty string.
    sep (str, optional): The separator used to concatenate keys. Defaults to "_".

Returns:
    dict: A single-level dictionary with flattened keys and corresponding values.

Example:
    >>> flatten_dict({'a': 1, 'b': {'c': 2, 'd': {'e': 3}}})
    {'a': 1, 'b_c': 2, 'b_d_e': 3}
You should write code starting with:
from collections.abc import MutableMapping

def flatten_dict(dictionary: MutableMapping, prefix: str = "", sep: str = "_") -> dict:
    # TODO: Implement this function
    pass

